我已经读过,一旦将引用初始化为对象,就无法更改它。 以下代码有效,所以也许我误解了这个概念? (或者他们是否意味着更多的是不可改变的意义?)
int main()
{
int x = 4;
int& j = x;
cout << j << endl;
int y = 5;
j = y;
cout << j << endl;
}
答案 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)
不能将引用指向不同地址的不同对象,但是在这里,可以更改对象本身的值。