2

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

int main()
{

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

4 回答 4

7

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

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

j = y;

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

cout << (&j == &x)

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

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

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

于 2013-06-05T21:30:05.550 回答
3

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

于 2013-06-05T21:30:48.350 回答
3

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

于 2013-06-05T21:30:07.860 回答
2

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

于 2013-06-05T21:30:42.507 回答