以下代码给出了一个奇怪的输出。我已经在多个编译器上尝试了它,最终得到了相同的答案。它将从右到左处理语句,但从左到右打印输出,但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;
}
答案 0 :(得分:2)
这将导致未指定的行为。没有指定操作执行的顺序(因为它们之间没有sequence points),所以三个分配
a = b + a
b = c + a
c = b + c
可以按任何顺序发生。因此,cout
的输出也未指定。