这有什么区别? 我认为这两个版本应该是平等的,但显然它们不是。 你能解释一下第一个如何运作吗?为什么打印222而不是122?
#include <iostream>
using namespace std;
int main() {
int a = 1;
/* #1: prints 222
cout << a << (a = 2) << a << endl;
*/
/* #2: prints 122
cout << a;
cout << (a = 2);
cout << a << endl;
*/
return 0;
}
答案 0 :(得分:0)
据我所知,您无法保证评估<<
表达式的子表达式的顺序。在第一个版本中,您的编译器决定在第一个输出之前执行赋值。
然而,第二个版本使操作顺序显式。分号清楚地表明打印操作应该在赋值操作之前进行。
这与例如评估不同。二元算子,由于短路,副作用的顺序是从左到右。