引用的定义相互矛盾

use*_*570 5 c++ pointers reference language-lawyer c++14

我正在学习 C++ 中的引用。特别是,我了解到引用不是实际对象。相反,它们引用了其他一些对象。也就是说,引用只是其他对象的别名。

然后我发现了这个,上面写着:

重要提示:尽管引用通常是使用底层汇编语言中的地址来实现的,但请不要将引用视为指向对象的滑稽指针。引用就是对象,只是有另一个名称。它既不是指向对象的指针,也不是对象的副本。它是物体。没有任何 C++ 语法可以让您独立于引用的对象对引用本身进行操作。

我知道上面的引用意味着我们不能将引用本身与它引用的对象分开进行操作,但它似乎仍然暗示“引用是一个对象”。

另外,我遇​​到过下面给出的句子:

在 ISO C++ 中,引用不是对象。因此,它不需要任何内存表示。

我没有第二条引文的链接,但我在某处的一篇帖子中读到了它。

我的问题是,假设第二个引用也来自标准(可能并非如此),这两个引用的陈述是否相互矛盾。或者至少第一句话是有误导性的。哪一个是正确的。

我目前的理解(通过阅读《C++ Primer 5th Edition》等书籍)是引用是对象的别名。这让我想到它们不应该占用内存中的任何空间。

eer*_*ika 3

重要提示:尽管引用通常是使用底层汇编语言中的地址来实现的,但请不要将引用视为指向对象的滑稽指针。引用就是对象,只是有另一个名称。...

注释是非正式的,通常不应被解释为严格的规则。如果解释与标准规则相矛盾,那么该解释就是错误的。

引用和对象是不同类型的实体。引用并不是一个与其命名的对象不同的对象。不可能形成指向引用的指针。“指向引用的指针”甚至不是有效的类型类别。

该注释试图说引用“是”它所命名的对象,因为使用引用就是使用所引用的对象。

我正在考虑确认引用是否占用任何空间

参考文献要么占用空间,要么不占用空间。由语言实现来确定在每种情况下是否需要空间。

标准报价:

[dcl.ref] 未指定引用是否需要存储


在标准规范之外,如果您想要使用空间的引用示例,请尝试向类添加引用成员,您很可能会观察到类的大小增加。

由于指针占用空间,因此引用也应该占用空间。...

指针确实在标准指定的抽象机中占用空间。但如果你从不观察存储,那么存储在实践中完全有可能不存在。引用和指针之间的一个显着区别是您无法直接观察引用的存储。

哲学家:“如果一棵树倒在一台抽象机器里,而周围没有人观察它,它会产生影响吗?”

优化者:“如果我能帮助的话就不会。”