我读过,一旦对对象的引用初始化,就无法更改。以下代码有效,所以也许我误解了这个概念?(或者他们在不变的意义上更多地意味着这个?)
int main()
{
int x = 4;
int& j = x;
cout << j << endl;
int y = 5;
j = y;
cout << j << endl;
}
以下代码有效,所以也许我误解了这个概念?
确实,恐怕您误解了这个概念。表达方式:
j = y;
不会重新绑定j
以使其成为对y
: 的引用,而是将 的值分配给y
引用的对象j
。分配后试试这个:
cout << (&j == &x)
你会看到它1
被打印出来了(意思j
仍然是 的别名x
)。
初始化后,引用成为它所绑定的对象的别名。你在引用上所做的一切,都是在被引用的对象上做的。
引用不能重新绑定或解除绑定,实际上它只是它所绑定对象的替代名称。
所传达的是一个引用不能被反弹。分配是影响x
,而不是j
。j
另一方面,x
即使在赋值之后,变量仍然绑定到。
您只是分配给引用,而不是将其绑定到新的“对象”(从技术上讲,不是对象)。如果您打印出来x
,您会发现它也发生了变化 (omg) :)
引用不能指向不同地址的不同对象,但在这里,可以更改对象本身的值。