c++中引用的澄清

Clarification of References in C++

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

所以我正在尝试学习c++,我遇到了一些让我有点困惑的事情。我有代码,

int x = 0;
int &y = x;
cout << &x<< " " << x << " " << &y << " " <<y<< endl;

编译得很好,结果是:

0 003AFA08 0 003AFA08

我很难理解为什么将int型x转换为引用型&y不会导致错误。一开始我以为这是某种转换,然而,

int &y = &x;

导致错误。

谁能解释一下为什么会这样?

int&不是地址。它是一个引用

int& y = x;声明yx的引用。这实际上意味着y成为x的另一个名称。当你使用y时,就好像你说的是x

指针(不是引用)用于存储地址。int& y = &x;是无效的,因为&xx的地址(它是int*)。y是对int的引用,而不是对int*的引用

这不是转换。当你有一个变量类型T &,其中T是一些随机类型,你基本上是说"我正在声明一个名字,这是另一个名字的别名,或者可能是一个匿名值。"它更像一个typedef而不是一个指针。

引用碰巧经常被实现为地址,但这不是一个思考它们是什么的好模型。

在你困惑的例子中:

int * const &y = &x;

就可以了。然后,y成为获取x地址的临时结果的别名。注意,这是对指针的引用。它必须是对常量指针的引用,因为它是对临时值的引用。