'x + = x--'后的x是多少?

Mer*_*soy 0 c++ operators post-increment

在执行下面的代码后发生了什么?

int x = 10;
x += x--;
Run Code Online (Sandbox Code Playgroud)

我期待结果19(将x添加到x然后将x减1)但结果为20.它如何在窗帘后面工作?谢谢你的回答.

tif*_*tif 6

这种情况下的行为在C++ 17之前是未定义的,参见例如https://en.cppreference.com/w/cpp/language/eval_order#Undefined_behavior,所以如果你的编译器不符合它,那就没用了测试或试图理解它:它将取决于实现,甚至编译器的版本.

如果您的编译器符合C++ 17,则可以保证在评估左侧之前,在简单或复合赋值(=+=分别)中,右侧的所有副作用都将被处理.

在您的情况下,x--评估是10伴随着设置x=9为其副作用,然后计算机将添加10x=9结果x=19.

感谢Micha?因为他的纠正,我把它纳入了答案.