为什么更改引用指向不引发错误?

时间:2011-08-03 17:21:57

标签: c++ reference rules

我进入了关于参考文献的c ++研究阶段。它陈述了以下规则:

将参考初始化为对象后,无法将其更改为引用另一个对象。

Iv写了一个简短的代码(正如练习中所要求的那样),旨在证明这条规则是正确的。

int y = 7;
int z = 8;

int&r = y;
r = z;

有人可以解释为什么这段代码会编译而没有任何错误或警告吗?

5 个答案:

答案 0 :(得分:7)

r = z不会更改r指向的内容。“它将z的值分配给r指向的对象。

以下代码与您的代码完全相同,但使用指针而不是引用:

int y = 7;
int z = 8;

int* p = &y; // p points to y
*p = z;      // assign value of z to the object pointed to by p (which is y)

答案 1 :(得分:4)

它不会将引用别名设为其他内容,但会更改r包含的值。

int&r = y;

r是对y

的引用
r = z;

更改y&的价值通过将r的值分配给z& zr的值为y因此{{1}}。

答案 2 :(得分:4)

int&r = y;
r = z;

它不会更改参考。而是更改引用变量指向的。引用变量只是y的另一个名称。所以r=z相当于

y = z;

也就是说,r=z更改y

无法以任何方式重置参考变量 以引用另一个变量。

答案 3 :(得分:3)

你没有改变参考;您正在为引用的对象设置新值。在这个例子之后你应该注意y == 8。

答案 4 :(得分:1)

执行r = z时,您没有重新引用该引用,而是z的值复制到y