一、引用的概念
引用没有新定义一个变量,而是给已经存在的变量取别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
类型& 引用变量名(对象名 ) = 引用实体
引用类型必须和引用实体是同一种类型:
二、引用的特性
1. 引用在定义的时候必须初始化
2. 一个变量可以有多个引用
3. 引用一旦引用一个实体,再不能引用其他实体
三、常引用
权限不能放大
下面是权限的缩小:
权限缩小是可以的
下面这种情况为什么又不能?
为什么加const才可以?
这里因为 a 给 b 的时候不是直接给的,a 生成临时变量然后再给 b,因为 临时变量具有常性,可以理解就好比被 const 修饰了一样,所以加 const 才可以。
四、使用场景
1. 做参数
(1) 输出型参数。
这里首先先理解什么是输出输入型参数:
输入型参数:我传给你 是输入给你用的
输出型参数:我传给你 是希望你里面改变了 我外面能拿到你里面改变的值
(2) 大对象传参,提高效率。
这里的返回值是出了作用域返回对象还存在,如果是局部对象出了作用域就销毁了,一定不能用引用返回。
这里的 n 是在静态区的,出了作用域也不会销毁,但是如果去掉 static 那么就不能用引用返回了。
2. 做返回值
(1) 输出型返回对象,调用者可以修改返回对象。
(2) 减少拷贝,提高效率。