为什么更改参考点以不引发错误? Iv在我的C++研究中提到了参考文献。它规定了以下规则:

为什么更改参考点以不引发错误? Iv在我的C++研究中提到了参考文献。它规定了以下规则:,c++,reference,rules,C++,Reference,Rules,一旦一个引用被初始化为一个对象,它就不能被更改为引用另一个对象 Iv写了一个简短的代码(在练习中被要求)来证明这个规则是正确的 int y = 7; int z = 8; int&r = y; r = z; 有人能解释为什么此代码编译时没有任何错误或警告吗?它不会将引用别名设为其他名称,但会更改r所包含内容的值 int&r = y; r是指y r = z; 通过将z的值赋给r,将y和r的值更改为z,从而y int&r = y; r = z; 它不会更改引用。而是

一旦一个引用被初始化为一个对象,它就不能被更改为引用另一个对象

Iv写了一个简短的代码(在练习中被要求)来证明这个规则是正确的

int y = 7;
int z = 8;

int&r = y;
r = z;

有人能解释为什么此代码编译时没有任何错误或警告吗?

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

int&r = y;
r
是指
y

r = z;
通过将
z
的值赋给
r
,将
y
r
的值更改为
z
,从而
y

int&r = y;
r = z;
它不会更改引用。而是更改引用变量指向的值。引用变量只是
y
的另一个名称。因此
r=z
相当于

y = z;
也就是说,
r=z
更改
y
的值

int&r = y;
r = z;

引用变量不能以任何方式重置为引用另一个变量。

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)

您没有更改引用;您正在为引用的对象设置一个新值。在本例之后,您应该注意y==8。

当您执行
r=z
时,您不是在重新放置引用,而是在将
z
的值复制到
y

中。为了本例,我必须尝试重新放置引用,以表明编译器不允许这样做。我该怎么写呢?换句话来说:“我该怎么做[这件不可能做的事]?”@James-我读这本书时很少听到笑声。谢谢。演示所需错误条件的一个好方法是创建一个包含对int的引用的结构。创建该结构的两个实例(称为A和b),并用两个不同的int初始化。现在尝试“a=b”。这将产生一个错误,因为它成功的唯一方法是更改引用的内容。
int&r = y;
r = z;