引用
引用
概念
就是给实体起一个别名,注意在使用时必须进行初始化。
特性
在同一个空间内,一个引用只能有一个实体,而一个实体可以有多个引用(别名)。【如同一个人可以有多个别名,但多个别名只对应这一个人】
常引用
即带const的引用。
若为常引用则不可以通过这个引用名来改变实体,但是实体还是可以改变的。因为这里比较容易混举例:
通过改变实体改变后:
若是想要通过const引用改变(如: cra = 5),程序会报错。
const类型的引用是一个全能引用:既可以引用左值也可以引用右值。作用对于自定义类型作用较大。
应用场景
- 做为函数的参数
用引用来传参可以改变外部的实参。
优点在于效率高,节省空间。 - 作为函数的返回值
提高效率(返回地址),节省空间。
注意:按照引用来返回时,不能返回栈上空间(即无效的空间)。
返回变量的生命周期不可受函数结束影响。但是当返回变量在函数结束时被销毁,可以使用static加长变量的生命周期。
关于右值引用
这是C++11中出现的。
右值即为不可以放在赋值运算符左边的,不可以取地址的值。
因为右值较难判别,以下作为判断参考:
- 表达式可能是右值:
如a+b满足条件为右值,而++a为左值。 - 有些函数返回值结果可能为右值
若需要强行右值引用一个左值,可使用move将左值转化为一个右值。如:b为一个整型变量,可以用int&& rb=move(b)。
右值引用主要应用于:移动赋值,移动构造。
值、指针、引用的比较
传值 | 传指针 |
---|---|
不能通过形参来改变外部实参 | 可通过形参改变实参 |
浪费空间,降低代码运行效率 | 效率更高 |
传值(值返回):效率最低,因为要创建临时变量。
- 指针能有效的表示数据结构
- 动态分配内存,实现内存管理自由
- 能方便的使用字符串
- 便捷高效的使用数组
指针与引用的效率类似。
引用的底层实现是指针。/ 引用 指针 本质 别名 地址 内存 不分配 分配 指向 不可以改变 可以改变 级 只能是一级 没有限制
二级指针对应:T&*(指针的引用)