cout 内函数调用的顺序

ank*_*man 4 c++ cout c++14

我想知道 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;
}
Run Code Online (Sandbox Code Playgroud)

“我预计输出是44,但实际输出是53”

Dra*_*rax 5

如此处所述: https: //en.cppreference.com/w/cpp/language/eval_order

任何表达式的任何部分的求值顺序(包括函数参数的求值顺序)均未指定(下面列出了一些例外情况)。编译器可以按任意顺序计算操作数和其他子表达式,并且在再次计算同一表达式时可以选择其他顺序。

C++ 中没有从左到右或从右到左求值的概念。不要将这与运算符从左到右和从右到左的结合性混淆:表达式 a() + b() + c() 被解析为 (a() + b()) + c( ) 由于运算符+的从左到右关联性,但对 c 的函数调用可以在运行时首先、最后或在 a() 或 b() 之间求值

在你的行中

cout << sum(3) << sum(2)
Run Code Online (Sandbox Code Playgroud)

两个operator<<调用的顺序取决于您使用的运算符(这里<<是从左到右),但是每个子表达式的计算,即sum(3)andsum(2)没有定义的顺序,并且取决于编译器的心情(通常是最优化的编译方法) 。

有关信息,这里是运算符关联性列表:https ://en.cppreference.com/w/cpp/language/operator_precedence

  • @ankursuman:这不是“随机”;这是*任意的*。也就是说,没有指定特定编译器的顺序,但会有一些顺序。 (3认同)