C++引用的误解

3

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

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

下面的代码可以在g++ 4.6.1上完美运行,尽管它违反了#2:

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

输出是什么?我猜它将30分配给a。 - Paolo
6个回答

7

你并没有重新定义引用,而是将值分配给了被引用的内存位置。打印a,你会看到它将打印30而不是10 ;-)


5

绝地武士的心灵技巧:

更好地理解引用变量的方法是将其视为变量的名称。 int& x = a意味着当您说x时,实际上指的是a

将引用视为别名。

这很清楚:

int a = 10, b = 30;

不要把这看作是x = 10,而应该看作是“x是a的另一个名称”。

int& x = a;

所以现在,x仍然引用a,所以你会给a赋值为b(30)。
x = b;

此时,x 仍然绑定到 a,你只是改变了它的值。

因此,在这一点上,x == 30 并且 a == 30,但如果你执行以下操作:

a = 10;

x 也将等于 10


3

该引用无法被重新安装,即无法引用不同的变量。

可以通过该引用修改变量。

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


2

问题中的代码不会出错2

在你写下这一点时:

int& x = a;

x 变成了 a 的别名。

稍后你写道:

x = b;

通过其名为x的别名,将b的值赋给a

1

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


0

第三个语句并不是你所认为的那样。它将b的值赋给了x,从而也赋给了a


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接