对C ++引用的误解

时间:2011-12-05 14:08:49

标签: c++ reference

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

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

    以下代码完全在g++ 4.6.1上运行,尽管它打破了#2:

    int a = 10, b = 30;
    int& x = a;
    x = b;
    

6 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

Jedi mindtrick:

帮助我更好地理解引用的是将它们视为变量的名称。 int& x = a只是意味着当您说x时,您实际上是指a

将引用视为别名。

这很清楚:

int a = 10, b = 30;

认为这不是x = 10,而是“x是一个不同的名称。”

int& x = a;

现在,x仍会引用a,因此您提供的值为b(30)。

x = b;

此时,x仍绑定到a,您刚刚更改了其值。

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

a = 10;

x也将等于10

答案 2 :(得分:3)

引用不能重新设置,即导致引用不同的变量。

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

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

答案 3 :(得分:2)

问题中的代码不会破解2

在你写的那一点:

int& x = a;

x 成为 a 别名

后来你写道:

x = b;

通过名为 x 的别名将 b 的值分配给 a

答案 4 :(得分:1)

常量变量必须在声明语句中初始化,不能重新定义。

答案 5 :(得分:0)

第三种说法不符合你的想法。它会将b的值分配给x,从而分配给a