我想要知道cout语句内函数的执行顺序。
我尝试了以下代码:
#include < iostream >
using namespace std;
int i=0;
int sum(int a)
{
i++;
return a+i;
}
int main()
{
cout << sum(3) << sum(2) ;
return 0;
}
我预期输出应该是44,但实际输出是53。
任何表达式的任何部分,包括函数参数的评估顺序都是未指定的(有一些例外情况在下面列出)。编译器可以以任何顺序评估操作数和其他子表达式,并且在再次评估相同表达式时可能选择另一种顺序。
C ++中没有从左到右或从右到左的求值概念。这不应与运算符的从左到右和从右到左的结合性混淆:由于operator +的从左到右结合性,表达式a() + b() + c()被解析为(a() + b()) + c(),但是在运行时对c的函数调用可以首先、最后或在a()或b()之间进行评估。
在你的那一行中
cout << sum(3) << sum(2)
operator<<
调用的顺序取决于您使用的运算符(此处为<<
,因此从左到右),但每个子表达式的评估,即sum(3)
和sum(2)
的评估顺序未定义,取决于编译器的心情(通常是最优化的编译方法)。