所以在c ++中为什么这两个输出不同?
int x;
for(int x=2;x<5;x++);
cout<<x<< x++ << ++x << x <<endl;
这输出7677
cout<<x<<endl;
cout<<x++<<endl;
cout<<++x<<endl;
cout<<x<<endl;
这输出5577
那为什么他们不一样?
我猜测第一个是同时计算整行,这就是它输出7的原因但是为什么++x
仍然会输出6?这里有什么优先或正在发生的事情?
答案 0 :(得分:1)
在C ++ 17中不应该有所不同,但在它之前不会有所不同。
在移位运算符表达式
E1<<E2
和E1>>E2
中,E1的每个值计算和副作用在E2的每个值计算和副作用(从C ++ 17开始)之前都被排序
如果您在C ++ 17之前使用C ++标准,则行为为undefined,因此编译器可以执行您不想要的任何工作。
如果您想了解更多关于评估表达式可以导致未定义行为的更多信息,请参阅: