我进入了关于参考文献的c ++研究阶段。它陈述了以下规则:
将参考初始化为对象后,无法将其更改为引用另一个对象。
Iv写了一个简短的代码(正如练习中所要求的那样),旨在证明这条规则是正确的。
int y = 7;
int z = 8;
int&r = y;
r = z;
有人可以解释为什么这段代码会编译而没有任何错误或警告吗?
答案 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
& z
,r
的值为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
。