c – 使用std :: cout评估参数的顺序

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

代码:

#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.任何帮助表示赞赏!

最佳答案
表达式中元素的评估顺序是未指定的(除了一些非常特殊的情况,例如&&和||运算符以及引入序列点的三元运算符);因此,不能保证在foo(测试)之前或之后评估测试(修改它).

如果您的代码依赖于特定的评估顺序,获取它的最简单方法是将表达式拆分为多个单独的语句.

转载注明原文:c – 使用std :: cout评估参数的顺序 - 代码日志