前言
- 大家好吖,欢迎来到 YY 滴 C++系列 ,热烈欢迎!
- 如标题所示,本章主要内容主要来侃侃“引用”这个刺客!如下就是大纲啦~
一.引用
1.含义与特点
引用,即取别名。它的最大特点是编译器不会为引用变量而开辟空间,他们共用同一块空间。
2.引用和指针的区别(主要)
1.引用使用时必须要初始化。
2.引用在初始化时引用一个实体后,不能再次引用其他实体,只能赋值。
3.引用使用起来更安全。
图示:
3.引用的实际使用
一.引用作为参数
作为输出型参数时,面对大对象/深拷贝对象时,由于不用另外开辟空间拷贝,可以提高效率
二.引用作为返回值
小目录:
- 适用场景
- 修改返回值+获取返回值 (使通讯录代码更简洁)
1.不适用场景:
适用场景:(静态区栈帧不销毁)
2.实际应用
- 在通讯录中,用传统的方法,需要“查找"到对应pos位置后再“修改”
- 而运用“引用作为返回值”,可直接对查找到的值进行修改。
原本操作:
改进后操作:
3.引用过程中的权限问题(平移,缩小,放大)
- 首先我们要知道,临时变量是具有常性,const 修饰的类型也具有常性,static的数据存储在静态区同样具备常性。
- const和static的权限理论上平级,而临时变量的权限低于二者。
- 只能存在权限平级和权限缩小的情况,不能存在权限放大的情况。通俗而言:权限低的不能给权限(常性)强的取别名。
权限相关知识点:【权限等级较高的是const和具有常属性的量,权限较低的是普通数据】
- 权限高的或平级的可以给另一量取别名/取地址(权限的缩小和平移)
- 权限低的不能给另一量取别名/取地址(权限的放大)
图示:
1.平级和权限缩小的情况
2.权限平移情况
3.权限放大情况
PS:const原则上不能修改,但是可以通过找到其空间直接修改。(指针/别名)