对c++引用的误解

misunderstanding of C++ references

本文关键字:误解 引用 c++      更新时间:2023-10-16

我过去对c++引用的了解是:

    引用应该在声明语句中初始化。
  1. 引用定义后不能重新定义

下面的代码在g++ 4.6.1上完美地运行,尽管它破坏了#2:

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

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

Jedi mindtrick:

帮助我更好地理解引用的是将它们视为变量的名称。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 == 30a == 30,但是如果你这样做:

a = 10;

x也等于10

该引用不能被重置,即导致引用不同的变量。

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

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

问题中的代码不打破2

:

int& x = a;

x 成为别名,

之后你写:

x = b;
b通过别名x赋值给a

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

第三条语句的作用与您想象的不同。它将b的值赋给x,从而赋给a