C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

Posted credream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++_引用做函数的返回值_引用的本质---C++语言工作笔记032相关的知识,希望对你有一定的参考价值。

然后我们再去看,要注意不要反悔局部变量的引用什么意思?

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

比如这里我有个方法,test01,他返回了一个int a =10;

这个变量的引用,而a这个变量是个局部变量.

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

这个时候我们去用一个引用,接收这个test01这个函数的返回值,

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

然后我们去打印,可以看到

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

第一次打印正常.

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

但是第二次打印呢?

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

出问题了对吧,出现了乱码,这说明,对于局部变量a来说,脱离了函数体,实际上在外面用他的时候,他就已经

被清空了在内存中,但是c++编译器为了,安全起见,仅仅是保留了一次,第二次调用的时候,就没有了

所以这个一定要注意,不要使用,局部变量的引用.


或者说不要反悔局部变量的引用.

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

然后再去看第二个注意点,

函数的调用可以做为左值.

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

是什么意思呢?

我们再去看这个test02这个函数

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

可以看到他是返回一个静态变量

static int a = 10;

我们说静态变量,放到全局区中,全局区中的数据,会在程序结束的时候才会被系统释放.

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

这个时候我们去调用test02,获得静态变量a的引用,然后打印

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

第一次没问题可以看到

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

我们再去连续打印多次,可以看到

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

结果也是没问题的.

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

然后,上面说的那个函数的调用可以做左值,就是

上面的这种写法,很少见对吧,c++中可以这样写.

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

可以看到,test02() = 1000; 已经生效了.起作用了

其实就是相当于赋值了.

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

test02() = 1000;

可以看到如果函数返回的是个引用的话,这个函数可以做为左值,其实很好理解对吧.

因为都是引用,所以,修改了这个test02() 这个函数的值,也就相当于修改了函数中a这个变量的值.

C++_引用做函数的返回值_引用的本质---C++语言工作笔记032

然后我们再去看看,引用的本质是什么?


实际上应用的本质是个指针常量,我们说

比如

int * const p2 =100;

这个const修饰的是p2这个指针,这个就是指针常量,可以这样理解,前面是* 是指针,就叫指针常量,后面是* 就叫常量指针

而const没有修饰int * 所以这个变量的值是可以变的,这个就是指针常量.



然后再复习一下常量指针,常量指针,指针在后面,常量在前面,也就是* 在后面,const在前面

const int * p2 =100;


c++之所以给我们推出这个引用的技术,看起来有点多余,跟指针常量是一样的,但是用起来很方便.










以上是关于C++_引用做函数的返回值_引用的本质---C++语言工作笔记032的主要内容,如果未能解决你的问题,请参考以下文章

C++之引用操作

C++11 中的左值引用和右值引用的区别

C++入门基础教程:const限定符 与 “引用”

将 C 函数和参数作为右值引用传递

C++核心编程引用

在c语言中子函数引用主函数中的值和引用主函数某个值的地址的区别