【c++初阶】:引用

C++中的引用不同于C语言的指针,它是一个已存在变量的别名,不可重新绑定。引用在定义时必须初始化,并且一旦绑定后不能改变。引用在函数参数传递和返回值中提供了便利,可以避免复制开销。常引用则确保变量不可修改,防止权限放大。在底层实现上,引用类似于指针,但语法上更安全。
摘要由CSDN通过智能技术生成

一.概念

在这里插入图片描述

c语言中我们常用指针找地址,但在c++中,忽略了指针(当然也可以使用指针)。常用引用这个概念。

二.使用

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

可以看到这里的b和c本质上都是a,只是不同的称呼罢了。

一个问题,下面这段代码是将x赋值给了b,还是b变成了x的别名呢?

在这里插入图片描述

在这里插入图片描述

答案是x赋值给了b,这也是c++与java在引用上最大的区别。c++的引用是不可更改的。

总结:1. 引用在定义时必须初始化
2. 一个变量可以有多个引用
3. 引用一旦引用一个实体,再不能引用其他实体

三.应用

作参数

那么引用在实际工程里有什么作用呢?我们可以看一个经典的函数。

在这里插入图片描述

在这里插入图片描述

在c语言中我们必须传地址才能实现交换,在c++中直接引用毫无疑问方便多了。

引用作返回值

在这里插入图片描述

在函数建立栈帧并开始返回时会创建一个临时变量来存储返回值,之后再将其带回(如果数据较小,通常是寄存器,如果对函数栈帧不了解可以看看这篇博客函数栈帧),而我们可以直接通过返回引用,这样的话编译器就不会产生临时变量从而极大的提高我们的效率。

注意,引用跟指针类似,这里是因为n加了static储存在静态区,才不会随着函数栈帧的销毁而被销毁,才能直接通过引用(地址)来返回n。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

四.常引用

在引用过程中,权限不能被放大但可以平移或者缩写,例如:原来的量不能被改变,那么你的引用也不能被改变。

在这里插入图片描述

在这里插入图片描述

这也是一个权限被放大的问题,返回的整形是一个临时变量,而临时变量具有常引性(常数性)不能被修改,所以ret在这权限被放大了。要如下写:

在这里插入图片描述

此时的ret也不可被修改,实现了权限的平移。同理下面也是一样的道理。

在这里插入图片描述

从double转换到int会进行隐式类型转换,会创建一个临时变量,而临时变量具有常引性不可被修改,所以这里的yy也是权限被放大了,可以如下改:

在这里插入图片描述

五.引用与指针

联系

引用在语法层面上只是一个量的别名,不开空间但实际上在底层汇编语法上看引用是类似与指针的方式实现的。

在这里插入图片描述

在这里插入图片描述

区别

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

咸蛋挞

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值