c++ 之引用

c++在指针的基础上添加了引用,祖师爷本贾尼博士既然要创建这个语法,说明指针一定有不足之处。那么接下来就来学习一下引用:

引用的概念

引用就是给一个变量取取别名。例如西游记里的孙悟空又叫齐天大圣,也叫孙行者。

所以我们取了别名就可以直接来使用原名对应下的内存数据了。

引用的语法

引用用 "变量名&"来创建

引用可以给变量取别名,也可以给别名取别名。

引用的特性和优点

A:引用在创建时必须被初始化。相当于生活中我们不能凭空取名,取名要对照某个物体。

B:一个变量可以用多个引用。就像一个人可以有多个名字,自己的全名、书名、小名等。

C:引用一旦引用一个变量,就不能再引用其他变量。就像一个人的名字只能你用,不能给其他人。

D:因为引用和原名是共用一个内存的,所以创建引用是不会额外开辟空间的。

E:引用不像指针需要解引用操作,而是拿到了直接就可以操作,增加了代码的可读性,同时写的爽。

F:在一些操作符重载的情形下,必须要返回引用,即返回它自己,这样就可以继续操作自己,而返回指针是不好操作的

这里以类进行举例,我们重载一个+=的运算符。就可以完成(x+=y)+=y的操作。

因为x+=y返回值是x的别名,那么就相当于x+=2y。

G:引用创建前需要有对象,所以能够避免空指针的出现。

const引用

直接的引用是可以修改原地址的,但是有些情况我们并不希望值能够被修改,因此就有了const&

这种引用能够让当前的别名只读不可写。

引用不能引用空值

但是可以这样写

但是这里并不能代表它指向了空值,因为它指向的是一个已经有的对象,这个对象的地址并不是空值,只能说它存放的地址是空值。

const引用能够让我们给一些常量取别名

 众所周知,"ada"这个是存储在代码段里面的,属于是常量的一种。我们用值接收的时候,它就会产生一个临时变量供我们接收,这个临时变量具有常性,所以我们必须要用常引用来接收,否则就会发生“权限放大”。

其实这种产生中间变量很常见

下面这些情况都是一样的,顺序是先开辟空间,然后被临时变量赋值,这个临时变量就是通过右侧的值返回的。

const 引用的作用

它还是很重要的,因为引用很方便,经常作为传参:

例如这个函数,我们就可以操作传过来的值。但是如果我们传入的是数组等常量呢?就会发生权限的放大,原来不可修改的值被放大成能在函数里面修改了。所以我们需要加const来增加传参的范围。

引用的底层

我们通过汇编来看,发现引用和指针的底层都是一样的,所以引用的底层就是指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值