简单的代码在C ++中提供了意外的输出

时间:2018-08-26 08:57:36

标签: c++ reference cout operator-precedence decrement

与cout语句的执行顺序有关吗?

代码:

int main() {

int x=80;
int &y=x;
cout<<x<<" "<<(--y)<<endl;
return 0;
}

输出: 79 79

2 个答案:

答案 0 :(得分:3)

  

与cout的执行顺序有关吗?   声明?

这与order of evaluation有关。在c ++ 17之前,您的示例将表现出未定义的行为:

  

如果对标量对象的副作用相对于值未排序   使用相同标量对象的值进行计算,其行为是   未定义。

自c ++ 17起,行为已定义,在这种情况下,正确的输出为

80 79

答案 1 :(得分:2)

这是未定义的行为,意味着任何事情都可能发生。

有关更多信息,请参见:Unexpected order of evaluation (compiler bug?)