我无法理解,为什么代码的输出不是我所期望的。
#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;
}
I was expecting
4 8
最佳答案
这一行:
m = x++;
相当于:
x = x++;
因为 m
是对 x
的引用。
从 c++17 开始,首先计算右侧,结果为 2。然后 x
递增到 3。然后将右侧值赋给左侧为完毕。但这使用了右侧的旧值,即 2。所以上面的语句实际上什么也没做。
在 c++17 之前,
m = x++;
是未定义的行为。
关于c++ - 为什么递增并分配给引用,而不是更改值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64063990/