我是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
。