对C++引用的误解

Muh*_*edy 3 c++ reference

我以前对c ++引用的了解是:

  1. 引用应在声明语句中初始化
  2. 一旦定义,就无法重新定义引用

以下代码完美地运行g++ 4.6.1,虽然它打破#2:

int a = 10, b = 30;
int& x = a;
x = b;
Run Code Online (Sandbox Code Playgroud)

Gio*_*hal 7

您没有重新定义引用,而是为引用的内存位置分配值.做一个printf,a你会看到它会打印30而不是10;-)


Luc*_*ore 5

Jedi mindtrick:

帮助我更好地理解引用的是将它们视为变量的名称.int& x = a只是意味着当你说x,你的意思是a.

将引用视为别名.

这很清楚:

int a = 10, b = 30;
Run Code Online (Sandbox Code Playgroud)

想想这不是x = 10,但是"x是一个不同的名字".

int& x = a;
Run Code Online (Sandbox Code Playgroud)

所以现在,x仍然会引用a,所以你给出的值为b(30).

x = b;
Run Code Online (Sandbox Code Playgroud)

此时,x仍然必然a,你只是改变了它的价值.

因此,x == 30a == 30在这一点上,但如果这样做:

a = 10;
Run Code Online (Sandbox Code Playgroud)

x也会平等的10.