1.引用的特性
1. 引用在定义时必须初始化
2. 一个变量可以有多个引用
3. 引用一旦引用一个实体,再不能引用其他实体
如图,ra、rra分别是a的别名
2.引用做参数
如图,对于交换函数,可以用指针和引用两种方法, 但是引用可以直接使用,不需要再解引用。
3.引用做返回值
左图中,n为静态区变量,在引用返回时,会先放入临时变量,用ret给n起了一个别名;右图中,返回时会生产一个临时变量,把临时变量的值赋给ret。
错误示例:
由于n是局部变量,在返回后,由于ret是n的别名,但是n已经销毁,但是ret仍然在使用该空间,会造成不确定性;
内存销毁意味着什么?
1.空间仍然在,但是使用权不是我们的,我们存的数据不被保护
2.我们仍然能访问该部分空间,但是我们读写的数据是不确定的
空间的申请和释放,就像住酒店。空间读写数据,就像在房间寄存的东西,可能还在,也可能被打扫,更有可能被新的住户拿走。
因此我们可以得出结论:
出了函数作用域,返回变量不存在了,不能用引用返回,因为返回的结果是未定义的。
出了函数作用域,返回变量存在,才能用引用返回。
4.引用的优点
传引用返回:1.减少拷贝,提高效率。2.修改返回值。
引用做参数:1.减少拷贝,提高效率。2.输出型参数,函数中修改形参,实参也会被修改。
5.引用时的权限问题
如图,权限可以平移,也可以缩小,但是不能放大,一般情况下,引用做函数参数都是const引用