C++的引用

C++的引用本质上是一个常量指针,它在内存中占用4个字节,作为对象的别名。引用在定义时必须初始化,并且一旦绑定到变量后不可改变,提高了安全性。与指针类似,但不支持重新赋值,减少了编程中的潜在错误。
摘要由CSDN通过智能技术生成

本文参考:
https://www.cnblogs.com/ronny/p/3662556.html

定义:
引用就是一个对象的别名
引用不是值不占内存空间
引用必须在定义时赋值,将变量与引用绑定

本质:
引用实质上是通过指针实现的
引用是一个常量指针
引用在内存中占4个字节
在对引用定义时,需要对这个常量指针初始化

汇编层面分析:
我们从最简单的变量的定义开始,看编译器会做哪些事情。

int var = 42;
mov    dword ptr [var],2Ah  // 对应汇编代码

上面语句申请了一块内存空间,占4个字节,存放了一个int型的变量。内存里放的是42的二进制码。

汇编代码向我们表达的意思就是把42写入以var为地址的内容区域。var有点像我们理解上的指针,只是编译器并没有把它抽象出来,而是让我们更表象的理解:申请一个变量,它的值为42。

那么var这个变量名放在哪呢?

我们知道程序如果访问内存里的数据,需要通过地址来进行访问,所以上面的代码在经过编译器生成目标代码时,用存放42的地址了所有的var,所以结论时,目标文件中不存在var,所以变量名本身是不占内存的。

而我们知道,引用是变量的一个别名。那么,从这很多人会联想到,引用会不会也只是一个名字而已,编译器在生成目标代码的时候,会用实际地址替换引用呢?事实不是。

1     int var = 42; 
2 01303AC8  mov         dword ptr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值