澄清C++中的引用

Dan*_*zer 6 c++ variables reference

所以我试图学习C++,我遇到了一些令我困惑的事情.我有代码,

int x = 0;
int &y = x;
cout << &x<< " " << x << " " << &y << " " <<y<< endl;
Run Code Online (Sandbox Code Playgroud)

这编译好并导致:

0 003AFA08 0 003AFA08
Run Code Online (Sandbox Code Playgroud)

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

int &y = &x;
Run Code Online (Sandbox Code Playgroud)

导致错误.

任何人都可以解释为什么这种方式有效吗?提前致谢.

Jam*_*lis 11

int&不是地址.这是一个参考.

int& y = x;声明y作为参考x.它实际上意味着y成为另一个名称x.任何时候你使用y,就像你说的那样x.

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


Omn*_*ous 5

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

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

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

int * const &y = &x;
Run Code Online (Sandbox Code Playgroud)

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