【问题标题】:If once a reference is initialized to an object, it cannot be changed, why does this work? [duplicate]如果一旦一个对象的引用被初始化,它就不能被改变,为什么会这样呢? [复制]
【发布时间】:2013-06-05 21:28:00
【问题描述】:

我读过,一旦一个对象的引用被初始化,它就不能被改变。 以下代码有效,所以也许我误解了这个概念? (或者他们在不可变的意义上更多地意味着这个?)

int main()
{

    int x = 4;
    int& j = x;
    cout << j << endl;
    int y = 5;
    j = y;
    cout << j << endl;
}

【问题讨论】:

  • 它不会做你认为它做的事情。也打印出x

标签: c++ reference


【解决方案1】:

以下代码有效,所以也许我误解了这个概念?

确实,恐怕您误解了这个概念。表达式:

j = y;

是否重新绑定j,使其成为y 的引用:而是将y 的值分配给j 引用的对象。分配后试试这个:

cout << (&j == &x)

你会看到1被打印出来了(意思是j仍然是x的别名)。

初始化后,引用成为它所绑定的对象的别名。 您在引用上所做的一切,都是在被引用的对象上进行的

引用不能重新绑定或解除绑定,实际上它只是它所绑定对象的替代名称。

【讨论】:

    【解决方案2】:

    您只是分配给引用,而不是将其绑定到新的“对象”(从技术上讲,不是对象)。如果您打印出x,您会发现它也发生了变化(omg):)

    【讨论】:

      【解决方案3】:

      传达的是引用不能反弹。该分配影响x,而不是j。另一方面,变量j 仍然绑定到x,即使在赋值之后。

      【讨论】:

        【解决方案4】:

        引用不能指向不同地址的不同对象,但是像这里一样,对象本身的值是可以改变的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-06
          • 1970-01-01
          相关资源
          最近更新 更多