c++ - 为什么递增并分配给引用,而不是更改值?

标签 c++ reference

我无法理解,为什么代码的输出不是我所期望的。

#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/

相关文章:

python - "is"Python 运算符是否可以可靠地测试可变对象的引用相等性?

javascript - 使用对象引用调用 setinterval

c# - 使用 C# 运行 VBScript

C++ 编译器使用了错误的函数声明

c++ - 检测内存页面大小

c++ - 如果没有 ctrl+space,Qt Creator 自动完成功能将无法工作

c++ - 将变量声明为全局变量,然后声明为局部变量 -Shadowing-

c++ - 如何通过引用返回一个 vector ,隐含地期望一个空 vector 作为输入?

c++ - 具有映射的现代方式,该映射可以指向或引用已在堆栈上分配的不同类型的数据

c++ - GDB 无法插入内部断点