大家好,我今天偶然发现了这段代码,我对到底发生了什么以及更具体的顺序感到困惑:
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(使用前将#替换为@)