c++ 引用深入分析

    我们知道c++中变量其实是用于标识一段内存空间的,但我们将一个变量赋值给一个引用时,我们便可以通过引用来操作该变量对应的内存空间,用引用名来标识该段内存。直观来说引用就类似于别名。引用的生命周期依赖与所引用的对象,右值无法赋值给引用。

    引用的本质到底是什么?引用是否占用了内存?占用了多大的内存?

    

    将上面这段程序使用g++编译后的运行结果如下:

    

   可以看到,引用也是占内存空间的,比如char 和char&一样占据了1个字节,但是为什么只有一个char&的成员的结构的大小会是8字节,按理应该也是1字节才对。使用objdump工具查看其反汇编后的程序:

   从上图,可以看到先初始化var_2,将0x2 这个立即数放入 (-(0x11(%rbp))地址指向的内存中,然后初始化结构体ref_char,注意看,这里初始化是把(-(0x11(%rbp))放入了一段内存中,这就是说结构体里面存的实际上是一个地址,也就指针,所以打印结构体大小是8。char& 之所以是1 这只不过是编译器做的手脚,毕竟char& 引用的用处是标识一字节的内存,和char变量的用法是相同的,如果char& 得到的大小是8,就和实际应用意义有冲突了。

    现在我们可以知道,引用实际上也是指针,只不过编译器帮我们屏蔽了底层的细节,让我们用起来更方便。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值