对C+的误解+;参考资料 我以前对C++引用的了解是: 应该在声明语句中初始化引用 一旦定义了引用,就不能重新定义它

对C+的误解+;参考资料 我以前对C++引用的了解是: 应该在声明语句中初始化引用 一旦定义了引用,就不能重新定义它,c++,reference,C++,Reference,下面这段代码在g++4.6.1上完美运行,尽管它中断了#2: 您不是重新定义引用,而是为引用的内存位置指定一个值。打印a,您将看到它将打印30,而不是10;-) 第三个语句并不像您认为的那样。它将b的值赋给x,从而赋给a,引用不能重置,即导致引用不同的变量 完全可以通过引用修改变量 引用的基本效果是它变成了它所引用的值的另一个名称。问题中的代码没有中断2 在你写的时候: int& x = a; x = b; x成为a的别名 后来你写道: int& x = a; x = b;

下面这段代码在
g++4.6.1
上完美运行,尽管它中断了#2:


您不是重新定义引用,而是为引用的内存位置指定一个值。打印
a
,您将看到它将打印
30
,而不是
10
;-)

第三个语句并不像您认为的那样。它将
b
的值赋给
x
,从而赋给
a
,引用不能重置,即导致引用不同的变量

完全可以通过引用修改变量


引用的基本效果是它变成了它所引用的值的另一个名称。

问题中的代码没有中断2

在你写的时候:

int& x = a;
x = b;
x成为a的别名

后来你写道:

int& x = a;
x = b;
通过名为x

的别名将b的值分配给a: 帮助我更好地理解引用的是将它们看作变量的名称
int&x=a
的意思是当你说
x
时,你实际上是指
a

将引用视为别名

这很清楚:

int a = 10, b = 30;
不要将其视为x=10,而应视为“x是a的不同名称”

所以现在,
x
仍将引用
a
,因此您给a一个
b
(30)的值

此时,
x
仍然绑定到
a
,您只是更改了它的值

因此,此时,
x==30
a==30
,但如果您这样做:

a = 10;

x
也将等于
10

它是一个常量变量,必须在声明语句中初始化,并且不能重新定义

输出是什么?我想它是把30分配给一个
a = 10;