我无法理解,为什么代码的输出不是我所期望的。
#include <iostream>
using namespace std;
int main()
{
int m = 2, n = 6;
int &x = m;
int &y = n;
m = x++;
x = m++;
n = y++;
y = n++;
cout<< m << " " << n;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我期待
4 8
这一行:
m = x++;
Run Code Online (Sandbox Code Playgroud)
相当于:
x = x++;
Run Code Online (Sandbox Code Playgroud)
因为m是对x.
从 c++17 开始,首先计算右侧,结果为 2。然后x递增为 3。然后将右侧值分配给左侧。但这使用了右手边的旧值,即 2。所以上面的语句实际上什么也没做。
在 C++17 之前,
m = x++;
Run Code Online (Sandbox Code Playgroud)
是未定义的行为。