对C++引述的疑问
对C++引用的疑问问题就是:1,引用分不分配内存?若分配何时分配内存,有运行时分配内存的情况的吗?2,引用是如
对C++引用的疑问
问题就是:
1,引用分不分配内存?若分配何时分配内存,有运行时分配内存的情况的吗?
2,引用是如何实现的?
我是这么认为的:
1,引用分配内存。 引用是在编译时分配内存的。 看汇编时能看到引用占用了内存。
不清楚有没有运行时对引用分配内存的情况。
2,编译器在实现引用时,多数就是转换成const指针,因此引用基本上等同于自动解引用的const指针。
只能说引用在概念上或使用上等同于变量别名,但实现上等同于自动解引用的const指针。
大家对这几个问题怎么看? C++ 引用
[解决办法]
标准没说是否占用。实现的时候占用与否都可以。
[解决办法]
楼主说的基本上靠谱
不过语义和实现是两回事,虽然普遍实现为const指针,但标准似乎没有规定必须这么实现,引用在语义上只是别名
[解决办法]
基本错误。
引用是否具有存储是实现定义的,即编译器可以根据实际情况自行决定是否给予一个引用存储空间。不存在编译期分配存储这样的概念,两者是风马牛不一样的东西,人们常说的静态变量在编译期分配内存,是种误解,在编译期所做的不过是预留了位置,但实际分配分配内存的操作是在运行期。
由于引用不一定具有存储,因而引用不是对象,在C++03中不属于变量,但在C++11中属于变量。
引用的实现,不能说多数转换成const指针,const是抽象语义,到实现这一层就已经不存在了,在实现层没有const这样的东西,指针概念也一样,也属于抽象概念,在实现层已经不存在指针了,只有其实现物,通常是内存地址。应该这样说,多数情况下,引用使用了与指针一样的实现方法。
[解决办法]
#include <stdio.h>
int main(void)
{
int a = 100;
int &b = a;
printf(" a = %d &a = %p\n", a, &a);
printf(" b = %d &b = %p\n", b, &b);
}
结果:
a = 100 &a = 0xbfe818ac
b = 100 &b = 0xbfe818ac
所以, 我认为应该是没有分配内存的!
2 对于第二问
看看这个 引用实现机制
[解决办法]