复杂 cout 语句的解释

Explanation for a complex cout statement

下面的代码给出了一个奇怪的输出。我在多个编译器上试过,结果都是一样的。它将从右到左处理语句,但从左到右打印输出,但是 C++ 语句通常是从左到右求值的。有人可以解释为什么当我们重载 cout 语句时会发生这种情况。

输出: 15 10 5

然而,如果从左到右处理,输出应该是: 8个 10 12

#include<iostream>
using namespace std;

int main(){
    int a = 5, b = 3, c = 2;
    cout<< (a = b + a) << endl << (b = c + a) << endl << (c = b  + c);
    return 0;
}

这将导致未指定的行为。未指定操作执行的顺序(因为它们之间没有 sequence points),所以三个赋值

a = b + a
b = c + a
c = b + c

可以以任何顺序出现。因此 cout 的输出也是未指定的。