C++:为什么我可以在我的计算机上更改引用分配?

C++: Why I can change the assignment of reference on my computer?

初学C++,正在研究引用的概念

我研究过这样一个事实,即一旦定义和初始化引用,就不应该将其分配给其他对象,C++ primer 上对引用的描述指出,一旦将引用绑定到对象,就无法更改引用绑定到的对象。

我对这种说法感到困惑。我在我的电脑上试了下面的代码,编译器既没有报警告也没有报错。

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

我的电脑编译通过,打印输出,一个是2个,一个是4个,完全没有问题。

我对引用的概念感到困惑,这是我们不应该更改引用绑定到的对象的条件,还是我们不能 更改引用绑定到的对象?

P.S。甚至 C++ primer 的第 58 页也演示了引用引用新对象的示例,书中说这样做是可以的。像这样:

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

then you can't change the object which the reference is bounded to.

I am confused by this statement

该语句试图说明不能修改引用以引用另一个对象。引用的对象可以修改。

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

ref = b;

ref仍然引用a命名的对象。该对象被该赋值修改。赋值后a的值为4.

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

r仍然引用p命名的对象。该对象被该赋值修改。赋值后,p指向i.