复杂的cout语句的解释

时间:2015-09-30 14:18:34

标签: c++ overloading cout

以下代码给出了一个奇怪的输出。我已经在多个编译器上尝试了它,最终得到了相同的答案。它将从右到左处理语句,但从左到右打印输出,但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;
}

1 个答案:

答案 0 :(得分:2)

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

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

可以按任何顺序发生。因此,cout的输出也未指定。

相关问题