使用 std::cout 计算参数的顺序

2023-12-05

大家好,我今天偶然发现了这段代码,我对到底发生了什么以及更具体的顺序感到困惑:

Code :

#include <iostream>

bool foo(double & m)
{
    m = 1.0;
    return true;
}

int main()
{
    double test = 0.0;
    std::cout << "Value of test is : \t" << test << "\tReturn value of function is : " << foo(test) <<  "\tValue of test : " << test << std::endl;
    return 0;
}

输出是:

Value of test is :      1       Return value of function is : 1 Value of test : 0

看到这一点,我会假设在调用函数之前以某种方式打印了最正确的参数。所以这是从右到左的评估?在调试过程中,该函数似乎在输出之前被调用,这正是我所期望的。我正在使用 Win7 和 MSVS 2010。感谢任何帮助!


表达式中元素的计算顺序是未指定的(除了一些非常特殊的情况,例如&& and ||运算符和三元运算符,它们引入序列点);所以,不能保证test将在之前或之后进行评估foo(test)(修改它)。

如果您的代码依赖于特定的求值顺序,则获得它的最简单方法是将表达式拆分为多个单独的语句。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 std::cout 计算参数的顺序 的相关文章

随机推荐