c++中的引用是如何编码的?

How are references encoded in C++?

本文关键字:编码 引用 c++ 何编码      更新时间:2023-10-16
int x = 10;
int& y = x;
对于这种情况,x在堆栈上被分配为2/4/8字节,00…1010被写入这些字节。y的内存布局和内容是什么样子的?

源自c++ 11标准8.3.2.4 [dcl.ref]

未指定引用是否需要存储

所以它可能需要也可能不需要任何存储

让我引用http://en.cppreference.com/w/cpp/language/reference:

引用不是对象;它们不一定占用存储空间,尽管编译器可以在必要时分配存储空间实现所需的语义(例如,的非静态数据成员)引用类型通常增加类的大小必须存储内存地址)

从c++语言的角度来看,它是没有定义的。

在实践中,编译器通常以与指针完全相同的方式处理引用,尽管它们在c++中具有许多不同的属性。这意味着被引用变量的地址是物理存储的。也许编译器能做的唯一假设是引用不为空。尽管如此,我认为在c++代码中,如果不先使用指针,就不能访问存储在引用变量中的地址。

请注意,编译器经常可以优化引用变量,以至于您甚至无法确定它在程序集中的位置。它也可以对指针变量做同样的事情。