今天结合图片讲讲我对引用的理解,欢迎大家抓虫。
引用~给变量取别名
1.引用的性质
(1)一个变量可以有多个引用。
(2)引用在被建立时必须初始化。
(3)引用一旦引用一个实体就不能引用其他实体。
2.引用做返回值
关键点:引用是如何实现的?对变量本体取别名,然后通过别名直接抓取变量本体。
引用做返回值的优势
普通的返回值:类似于接力,中间经历了
- 一个函数的生命周期
- 建立临时变量
- 返回值拷贝给临时变量
- 临时变量的数据拷贝给ret
- 销毁临时变量
等一系列冗余操作。
(b)引用作返回值:类似于点名,引用会通过别名直接抓取变量本体拷贝给ret,直接对变量在内存中的信息进行操作。
ps:如果引用的本体被销毁,则引用失效,使用别名或本体名会进行野引用,类似于刻舟求剑。
3.引用时不能扩大变量权限,只能平移或缩小权限。
引用类似于给变量取外号,拷贝变量的值,继承变量的全部或部分权限。
因此当一个别名的变量本体是int类型时,不能将临时变量的值赋给它,因为临时变量有常性,赋值的同时常性也会赋予给变量导致权限扩大。除非在引用前面加上const,使别名权限最后的结果为缩小。
4.总结与补充:
(1)基本上任何情况下都可以使用引用。
(2)引用做返回值时要谨慎,要注意函数结束后引用的变量本体是否存在,如果变量本体被销毁则不能引用。如图:正确样例把n的值放于静态区没有销毁,因此可以被引用。
(3)引用无论是做参数还是返回值,其系统运行效率都是较高的。
(4)别名在创立时可以通过const对其权限进行精准调整。