c++中的引用是如何编码的?
How are references encoded in C++?
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++代码中,如果不先使用指针,就不能访问存储在引用变量中的地址。请注意,编译器经常可以优化引用变量,以至于您甚至无法确定它在程序集中的位置。它也可以对指针变量做同样的事情。
相关文章:
- 将对象数组的引用传递给函数
- 如何确定我已使用非编码文件到达 EOF?
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 引用一个已擦除类型(void*)的指针
- C++ 使用 GMime 3.0 解码引用的可打印编码
- 好的编码:指针而不是引用
- c++中的引用是如何编码的?
- 函数实参中的硬编码值是const引用吗?