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
.
初学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
.