澄清C ++中的引用

时间:2011-12-26 05:03:18

标签: c++ variables reference

所以我正在尝试学习C ++,而且我遇到了一些令我困惑的事情。我有代码,

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

这编译得很好并导致:

0 003AFA08 0 003AFA08

我无法理解为什么将x(一个int)转换为&amp; y(一个引用)不会导致错误。起初我认为这是某种转换,

int &y = &x;

导致错误。

任何人都可以用这种方式解释为什么会这样吗?提前谢谢。

2 个答案:

答案 0 :(得分:11)

int&不是地址。这是参考

int& y = x;声明y作为对x的引用。它实际上意味着y成为x的另一个名称。只要您使用y,就好像您曾说过x

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

答案 1 :(得分:5)

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

引用通常被实现为地址,但这不是考虑它们是什么的好模型。

在你的例子中,你感到困惑:

int * const &y = &x;

会工作得很好。然后y成为获取x地址的临时结果的别名。请注意,它是对指针的引用。它必须是对常量指针的引用,因为它是对临时值的引用。