首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

对C++引述的疑问

2013-08-16 
对C++引用的疑问问题就是:1,引用分不分配内存?若分配何时分配内存,有运行时分配内存的情况的吗?2,引用是如

对C++引用的疑问

问题就是:
1,引用分不分配内存?若分配何时分配内存,有运行时分配内存的情况的吗?
2,引用是如何实现的?

我是这么认为的:
1,引用分配内存。 引用是在编译时分配内存的。 看汇编时能看到引用占用了内存。 
不清楚有没有运行时对引用分配内存的情况。
2,编译器在实现引用时,多数就是转换成const指针,因此引用基本上等同于自动解引用的const指针。
只能说引用在概念上或使用上等同于变量别名,但实现上等同于自动解引用的const指针。

大家对这几个问题怎么看? C++ 引用
[解决办法]
标准没说是否占用。实现的时候占用与否都可以。
[解决办法]
楼主说的基本上靠谱
不过语义和实现是两回事,虽然普遍实现为const指针,但标准似乎没有规定必须这么实现,引用在语义上只是别名
[解决办法]

引用:
问题就是:
1,引用分不分配内存?若分配何时分配内存,有运行时分配内存的情况的吗?
2,引用是如何实现的?

我是这么认为的:
1,引用分配内存。 引用是在编译时分配内存的。 看汇编时能看到引用占用了内存。 
不清楚有没有运行时对引用分配内存的情况。
2,编译器在实现引用时,多数就是转换成const指针,因此引用基本上等同于自动解引用的const指针。
只能说引用在概念上或使用上等同于变量别名,但实现上等同于自动解引用的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 对于第二问

看看这个 引用实现机制
[解决办法]
引用:
 


#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);
}


结果:


vc6:
对C++引述的疑问
自己看去吧,我就不再说什么了

热点排行