引用是在内存中创建新位置,还是在现有单元格中创建别名?

jII*_*jII 9 c++ pointers reference

我正在学习指针和参考,我的问题涉及这个解释,特别是以下部分:

这表明声明int& ri = i创建了一个新的内存单元格,其值为&i并存在于未知的内存位置.

为了测试这个理论,我写了一个简单的案例,结果如下所示:

在此输入图像描述

我感到困惑的是,r并且i具有相同的内存地址,这似乎与读数相矛盾.结果表明,int& ri = i松散意味着"为内存单元创建一个别名i并调用它r",这样两者都指向完全相同的单元格.

文件是否正确,或者我错过了什么?

Pat*_*shu 10

由于r是引用i,所有操作r都由编译器转换为操作i.这样做&r,给你内存地址i.

(请注意,与指针不同,引用具有在声明后不被"重新引用"的属性 - 它们总是引用相同的东西 - 因此无法编写对引用进行操作的操作,而不是"引用的内容" ")

  • @jesterII甚至不可能问这个问题.无法保证引用完全具有地址,编译器可能会对其进行优化(与必须在某处的指针不同) (10认同)

Lyb*_*rta 9

C++11§8.3.2/ 4

It is unspecified whether or not a reference requires storage.
Run Code Online (Sandbox Code Playgroud)

通过声明左值引用(T&),可以为现有内存位置创建概念别名.编译器可以使用"似乎"规则来按照自己的意愿对其进行处理.它可能会创建一个指针,它可能只是直接访问内存,但你不应该关心它将如何实现.

您正在阅读的PDF描述了左值引用的可能实现,但在一般情况下是错误的.左值引用的良好思维模型将为同一变量赋予第二个名称,因此您可以通过几个不同的名称(和范围)访问相同的数据.

此外,您不能获取rvalue的地址或创建指针,但您可以创建一个rvalue引用.