C++引用的本质

C++中引用的本质即是指针. 当申明一个指向其它变量的引用时, 比如int b = &a,编译器偷偷地创建了一个变量,该变量会存储其引用的对象(a)的指针。并且一切对变量b操作,都变转变为对a指针的操作。然而编译器屏蔽了这一切,让使用者感觉一切都是“免费”的。 

#include <stdio.h>
int main()
{
    int a = 10;
    int &b = a;
    int *c = &b;
    b = 11;
    return 0;
}   

//对应x86上汇编代码

push   %rbp
mov    %rsp,%rbp
movl   $0xa,-0x14(%rbp)     //*(rbp -0x14) = 0xa ,即(a = 10) 
lea    -0x14(%rbp),%rax     //rax = rbx - 0x14
mov    %rax,-0x8(%rbp)      //*(rbp - 0x8) = rax
mov    -0x8(%rbp),%rax      // rax = *(rbp - 0x8), 即rax = rbx - 0x14
mov    %rax,-0x10(%rbp)     //*(rbp -0x10) = rax, 即*(rbp - 0x10) = rbx - 0x14
mov    -0x8(%rbp),%rax      //rax = *(rbp - 0x8), 即 rax = rbp - 0x14
movl   $0xb,(%rax)          //*rax = 0xb , 即*(rbp - 0x14) = b 
mov    $0x0,%eax
pop    %rbp

 栈上的空间如下:

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一条叫做nemo的鱼

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值