'x += x--' 后面的 x 是什么?

What is x after 'x += x--'?

执行下面的代码后发生了什么事;

int x = 10;
x += x--;

我期待结果 19(将 x 加到 x,然后将 x 减 1),但结果是 20。它在幕后是如何工作的?感谢您的回答。

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

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

在你的情况下,x-- 被评估为 10 伴随着设置 x=9 作为它的副作用,然后计算机将添加 10x=9 导致 x=19.

感谢 Michał 的更正,我将其纳入了答案。

使用较旧的 c++ 可能无法完成这项工作,因为根据较旧的标准,行为实际上被定义为未定义。 (感谢@LightnessRacesinOrbit)

如果你只是尝试一个有最新版本的在线编译器,它工作得很好,结果是你预期的 19(x+=x--x= x+x-- 相同。这意味着为了获得新的"x",它必须将旧的"x"+旧的"x" -1相加。所以它会做x+(x--),即x=10+(9)

试试看 here: 与:

#include <iostream>

using namespace std;

int main()
{
    int x = 10;
    x += x--;
    cout<<x<<endl;
}