引用(李逵?李鬼!)

本文详细解释了引用在C++中的概念,包括初始化、多引用、权限控制,以及引用作为参数和返回值的用途。讨论了引用与指针的区别,以及在不同场景下的优势,如避免拷贝和修改返回对象。
摘要由CSDN通过智能技术生成

引用概念

引用不是新定义一个变量,而是给已存在的变量取了一个别名,编译器不会为引用变量开辟他和他引用的变量共同用一块内存空间

这个就是引用

通过取地址也能看出来,i和k的地址明显是相同的

我们也可以再给别名取别名

以前写交换函数时只传值的话不能改变具体数值,只有传地址才可以

现在使用引用同样也能实现这一效果,这里的形参就是一个别名

而且还能给指针取别名,rp就是指针p的别名

这个函数是改变结构体的值就要传结构体指针的地址,用二级指针可能会有点复杂,所以就可以使用引用

引用特性

1、引用在定义时必须初始化

2、一个变量可以有多个引用

3、引用一旦引用一个实体,就不能再引用其他实体

引用的作用

1、做参数,做输出型参数

可以将如图的二级指针参数多次简化

2、做返回值

这里有段代码

n已经被static过了,现在放在静态区,返回的时候还需要创建一个临时变量才能返回到main函数

但是如果使用引用返回,就不会再创建临时变量了,而是n的一个别名,其实就是n

这个叫做传引用返回(出了作用域这个变量还在的情况下使用传引用返回)

传引用返回首先是可以减少拷贝

然后是可以修改返回对象

这种情况下数组里的值并不是在PosAt函数的栈帧里,所以出了这个函数就不会销毁,就可以直接使用引用返回,使用引用返回就减少了拷贝

而且在后面的main函数里还可以修改这个位置的值

注:如果函数返回时,出了函数作用域,如果返回对象还在(还没还给系统),则可以使用引用返回,如果已经还给系统了,则必须使用传值返回,如果使用引用返回,结果是未定义的

这个就是例子

长引用

首先要知道,权限只能缩小不能放大,并且权限也可以保持,这样的引用就是权限的平移

这样的引用就是权限的放大了,引用是这样,指针也是这样。本来const修饰后就只能读不能改变了,但是起了别名后就又能修改,就属于权限的放大(只使用指针和引用)

这时我们只要改成权限的保持就行

这个叫做权限的缩小

还有一种,const函数返回的并不是n,而是一个临时变量,这个变量具有常性,所以接收的变量也要用const修饰

还有这段代码,加个const突然就可以了;这其实因为变量的强制类型转换并不是将原有的变量转换了,而是先定义一个临时变量存放转换后的值,接着再将临时变量的值赋给要转换的变量,所以说ird接收其实是个临时变量的值,那就要进行权限保持

指针和引用的区别

从汇编语言其实可以看出,引用的操作其实和指针是一样的;在表层上面引用是不开空间的,但其实在汇编方面引用也是用指针实现的

但是

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值