为什么这两种输出样式给出不同的答案

时间:2018-05-19 00:46:17

标签: c++

所以在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?这里有什么优先或正在发生的事情?

1 个答案:

答案 0 :(得分:1)

在C ++ 17中不应该有所不同,但在它之前不会有所不同。

  

在移位运算符表达式E1<<E2E1>>E2中,E1的每个值计算和副作用在E2的每个值计算和副作用(从C ++ 17开始)之前都被排序

如果您在C ++ 17之前使用C ++标准,则行为为undefined,因此编译器可以执行您不想要的任何工作。

如果您想了解更多关于评估表达式可以导致未定义行为的更多信息,请参阅:

https://en.cppreference.com/w/cpp/language/eval_order