c++ - 引用如何不需要存储?

标签 c++ variables compiler-construction reference

来自 this question ,因此,来自标准 (ISO C++-03):

It is unspecified whether or not a reference requires storage (3.7).

在该线程的一些答案中,据说引用在内部具有相同的指针结构,因此具有相同的大小(32/64 位)。

我很难理解的是:引用如何需要存储?

任何示例代码都将不胜感激。

编辑: 来自@JohannesSchaub-litb 的评论,如果我没有使用 const &,或者如果我使用具有默认值的 const &,是否有类似的东西,它需要分配?在我看来,不知何故,根本不应该对引用进行分配——当然,除非涉及显式分配,例如:

A& new_reference(*(new A())); // Only A() instance would be allocated,
                              // not the new_reference itself

有这样的案例吗?

最佳答案

简单一点:

int foo() {
  int  x = 5;
  int& r = x;
  r = 10;
  return x;
}

实现可能在幕后使用指向x 的指针来实现该引用,但没有理由必须这样做。它也可以将代码转换为以下等价形式:

int foo() {
  int x = 10
  return x;
}

那么就不需要任何指针了。编译器可以将 rx 相同的可执行文件直接烘焙到可执行文件中,而无需存储和取消引用指向 x 的指针。

重点是,引用是否需要任何存储是您不需要关心的实现细节。

关于c++ - 引用如何不需要存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14799690/

相关文章:

c++ - MSVS 意外类错误 : Didn't forget the semicolon though

c++ - 变量在没有赋值的情况下具有值 C++

php - 在 PHP echo 中嵌入 javascript

java - 编译器自动机,我如何制作这个图以使线条不会相交?

重复方法调用的 Java 编译器优化?

c++ - .template 文件的 VS2012 保留字颜色

c++ - 多次读取和一次写入 - 线程安全?

c++ - 矩阵对角零点

ios - 对象自动设置为零

c - 编译器实现中 x++ 和++x 的区别