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++代码中不能直接访问引用变量存储的地址,除非首先使用指针。
请注意,编译器通常可以优化引用变量,以至于您甚至无法确定它在汇编中的位置。它也可以对指针变量执行相同的操作。
{
Object& my_object = Object();
// my_object 的生命周期为整个块
}
- Lucretiel
x
和y
是同一件事,只是不同的名称。 实际上谁知道呢,如果编译器认为这有帮助,可能会有多个副本的10
。 记住,变量从不占用内存空间,只有它们所代表的值才占用。 - tadman