第一章:Cpp引用—4

目录

什么是引用?

如何为一个变量创建引用?

引用的特性:

1.引用在定义时必须有一个已经被初始化的对象:

2.一个变量可以被多个引用变量引用:

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

常引用:

延申:

权限——放大:

权限——缩小:

引用的使用场景:

引用传参:

解析:

引用返回:

前提:

优点:

对比:

引用和指针的比较:


什么是引用?

        引用是为已有的变量取一个别名,编译器不会为引用变量开辟内存空间,引用和他所引用的变量共用同一块内存空间。

如何为一个变量创建引用?

需要注意的是,引用类型和引用实体必须为同一种类型。

引用的特性:

1.引用在定义时必须有一个已经被初始化的对象:

2.一个变量可以被多个引用变量引用:

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

常引用:

        当一个变量被const修饰时,这个变量就带上了常属性,当对一个带有常属性的变量引用时,需要加上const,否则会报错。

正确的写法为:

延申:

下面的引用为什么会报错?

        原因:变量类型转换时,会产生一个临时变量来存储要转换的值,这个临时变量具有常属性。由于引用的使用权限只包括平移和缩小,不能放大。因此,在类型转换并引用时,需要加上const。

权限——放大:

        对a的引用b需要加上const限制权限;如果不加const,b就变为了变量,也就可以修改了,属于是权限的放大了。

权限——缩小:

        变量a,对他的引用可以加上const,加上以后属于权限的缩小,不会报错。

引用的使用场景:

引用传参:

        在c语言中,有两种传参方式:传值,传地址。

        传值简单,但是不能修改原变量的值;

        传地址可以修改原变量的值,但是容易写错。

        在cpp中,定义函数时,使用引用作为形参,可以达到传值传参即可改变变量值的目的。

解析:

        使用引用接收参数,相当于为原变量创建了一个别名,对别名的操作会映射到原变量上。

引用返回:

        引用返回,返回的是返回值的别名,因此,可以对返回值直接操作。

前提:

        使用引用返回,要保证函数返回值所在的空间,出了函数的作用域依然存在,不会立刻销毁。如果会被销毁,就不能使用引用返回,而要使用传值返回。

优点:

        引用返回比传值返回具有更高的效率。

对比:

        引用返回,在底层实质上是按照指针的方式实现的。

        我们知道指针传参和值传参,以及指针返回和值返回在效率上差异较大。指针传递明显优于值传递。因此引用返回优于传值返回。

引用和指针的比较:

1. 引用概念上定义一个变量的别名,指针存储一个变量地址。

2. 引用在定义时必须初始化,指针没有要求

3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何 一个同类型实体

4. 没有NULL引用,但有NULL指针

5. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32 位平台下占4个字节)

6. 引用自加,使引用实体的值加1,指针自加是指针向后偏移一个类型的长度。

7. 有多级指针,但是没有多级引用。

8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理

9. 引用比指针使用起来相对更安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

S+叮当猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值