如果一个引用初始化为一个对象,它就无法更改,为什么这个工作?

时间:2013-06-05 21:28:00

标签: c++ reference

我已经读过,一旦将引用初始化为对象,就无法更改它。 以下代码有效,所以也许我误解了这个概念? (或者他们是否意味着更多的是不可改变的意义?)

int main()
{

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

4 个答案:

答案 0 :(得分:5)

  

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

确实,我担心你会误解这个概念。表达式:

j = y;

重新绑定j以便它成为y的引用:而是将y的值分配给引用的对象j。分配后尝试此操作:

cout << (&j == &x)

您会看到1已打印(意味着j仍是x的别名)。

初始化后,引用将成为绑定对象的别名。 您在引用上执行的所有操作,都是在引用的对象上执行

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

答案 1 :(得分:3)

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

答案 2 :(得分:3)

传达的是参考不能反弹。该作业正在影响x,而不是j。另一方面,即使在赋值之后,变量j仍然绑定到x

答案 3 :(得分:2)

不能将引用指向不同地址的不同对象,但是在这里,可以更改对象本身的值。