所以我正在尝试学习C ++,而且我遇到了一些令我困惑的事情。我有代码,
int x = 0;
int &y = x;
cout << &x<< " " << x << " " << &y << " " <<y<< endl;
这编译得很好并导致:
0 003AFA08 0 003AFA08
我无法理解为什么将x(一个int)转换为&amp; y(一个引用)不会导致错误。起初我认为这是某种转换,
int &y = &x;
导致错误。
任何人都可以用这种方式解释为什么会这样吗?提前谢谢。
答案 0 :(得分:11)
int&
不是地址。这是参考。
int& y = x;
声明y
作为对x
的引用。它实际上意味着y
成为x
的另一个名称。只要您使用y
,就好像您曾说过x
。
指针(不是引用)用于存储地址。 int& y = &x;
无效,因为&x
是x
的地址(它是int*
)。 y
是对int
的引用,而不是对int*
的引用。
答案 1 :(得分:5)
这不是转换。当你有T &
的变量类型,其中T
是一些随机类型时,你基本上是在说“我正在声明一个名称,它是另一个名称的别名,或者可能是一个匿名值。”它更像是typedef
而非指针。
引用通常被实现为地址,但这不是考虑它们是什么的好模型。
在你的例子中,你感到困惑:
int * const &y = &x;
会工作得很好。然后y
成为获取x
地址的临时结果的别名。请注意,它是对指针的引用。它必须是对常量指针的引用,因为它是对临时值的引用。