来自 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;
}
那么就不需要任何指针了。编译器可以将 r
与 x
相同的可执行文件直接烘焙到可执行文件中,而无需存储和取消引用指向 x
的指针。
重点是,引用是否需要任何存储是您不需要关心的实现细节。
关于c++ - 引用如何不需要存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14799690/