复杂 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
的输出也是未指定的。
下面的代码给出了一个奇怪的输出。我在多个编译器上试过,结果都是一样的。它将从右到左处理语句,但从左到右打印输出,但是 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
的输出也是未指定的。