C++_引用做函数的返回值_引用的本质---C++语言工作笔记032
Posted credream
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++_引用做函数的返回值_引用的本质---C++语言工作笔记032相关的知识,希望对你有一定的参考价值。
然后我们再去看,要注意不要反悔局部变量的引用什么意思?
比如这里我有个方法,test01,他返回了一个int a =10;
这个变量的引用,而a这个变量是个局部变量.
这个时候我们去用一个引用,接收这个test01这个函数的返回值,
然后我们去打印,可以看到
第一次打印正常.
但是第二次打印呢?
出问题了对吧,出现了乱码,这说明,对于局部变量a来说,脱离了函数体,实际上在外面用他的时候,他就已经
被清空了在内存中,但是c++编译器为了,安全起见,仅仅是保留了一次,第二次调用的时候,就没有了
所以这个一定要注意,不要使用,局部变量的引用.
或者说不要反悔局部变量的引用.
然后再去看第二个注意点,
函数的调用可以做为左值.
是什么意思呢?
我们再去看这个test02这个函数
可以看到他是返回一个静态变量
static int a = 10;
我们说静态变量,放到全局区中,全局区中的数据,会在程序结束的时候才会被系统释放.
这个时候我们去调用test02,获得静态变量a的引用,然后打印
第一次没问题可以看到
我们再去连续打印多次,可以看到
结果也是没问题的.
然后,上面说的那个函数的调用可以做左值,就是
上面的这种写法,很少见对吧,c++中可以这样写.
可以看到,test02() = 1000; 已经生效了.起作用了
其实就是相当于赋值了.
test02() = 1000;
可以看到如果函数返回的是个引用的话,这个函数可以做为左值,其实很好理解对吧.
因为都是引用,所以,修改了这个test02() 这个函数的值,也就相当于修改了函数中a这个变量的值.
然后我们再去看看,引用的本质是什么?
实际上应用的本质是个指针常量,我们说
比如
int * const p2 =100;
这个const修饰的是p2这个指针,这个就是指针常量,可以这样理解,前面是* 是指针,就叫指针常量,后面是* 就叫常量指针
而const没有修饰int * 所以这个变量的值是可以变的,这个就是指针常量.
然后再复习一下常量指针,常量指针,指针在后面,常量在前面,也就是* 在后面,const在前面
const int * p2 =100;
c++之所以给我们推出这个引用的技术,看起来有点多余,跟指针常量是一样的,但是用起来很方便.
以上是关于C++_引用做函数的返回值_引用的本质---C++语言工作笔记032的主要内容,如果未能解决你的问题,请参考以下文章