COUT 内部函数调用的顺序

order of function call inside cout

本文关键字:顺序 函数调用 内部 COUT      更新时间:2023-10-16

我试图知道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">

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

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

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

在您的生产线上

cout << sum(3) << sum(2)

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

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