C++:为什么我可以在电脑上更改参考资料的分配



我是C++的新手,我正在研究引用的概念。

我研究过这样一个事实,即引用一旦定义和初始化就不应该被分配给其他对象,C++引物上对引用的描述表明,一旦你将引用绑定到对象,那么你就不能更改引用绑定到的对象。

我对这种说法感到困惑。我在计算机上尝试了以下代码,编译器既没有报告警告也没有报告错误。

int a = 2;
int b = 4;
int &ref = a;
cout << "ref = " << ref << endl;
ref = b;
cout << "ref = " << ref << endl;

在我的电脑上,编译通过,输出被打印出来,一个是2,另一个是4,一点问题都没有。

我对引用的概念感到困惑,这是我们不应该改变引用有界的对象的条件,还是我们CANNOT更改引用有界对象的条件?

附言:即使是C++入门的第58页也展示了引用引用新对象的例子,书中说这样做是可以的。像这样:

int i = 42;
int *p;
int *&r = p;
r = &i; // isn't this changing r to an new object?
*r = 0;

则不能更改引用所绑定的对象。

的这句话让我很困惑

语句试图表明,不能将引用修改为引用另一个对象。引用的对象可以进行修改。

当赋值的左手操作数是一个引用时,您将间接通过该引用,并为被引用对象赋值。

ref = b;

ref仍然引用由a命名的对象。该对象被此赋值修改。在分配之后,a的值为4。

r = &i; // isn't this changing r to an new object?

r仍然引用由p命名的对象。该对象被此赋值修改。分配之后,p指向i

最新更新