返回引用到底啥意思
1、如果单纯的从返回值来看,返回引用,除了减少个把临时变量的产生之外,没什么大不了的。
2、返回引用,更主要的目的是楼上说的,为了左值运算。
就你说的那个销毁问题,实际上,
不管是 int f( int& x ) 还是 int& f( int& x ) 中的 x,在 f函数结束后,都不可能销毁的,因为它本来传入的时候就是一个引用类型,它不是值类型。
引用是什么?引用是别名,只是在f函数结束后,x这个别名失效了而已,x所代表的变量,仍然还存在。因为它存在于调用f函数之前的作用域里,至于x所代表的变量什么时候被销毁,在这处 int f( int& x ) 函数中是绝对看不出的。
如果返回引用,那么我们可以有这样的应用。
比如有函数 int& f( int& x ) { return x; }
那么,我们调用的时候,可以写这样的代码
int a;
f( x ) ++;
如果 f 函数不是返回引用的话,f( x ) ++ 语法虽然没有错,但是结果不会保存到 a 中,这就是一个左值功能的应用。
楼上几位说的基本详细了,就是返回引用的意思,指返回值是一个引用。你老师说错了。
所谓返回引用是指返回一个已存在对象的引用,(切记一定要是已经存在的)
所谓引用其实就是包装指针的一个语法糖,
所谓语法糖就是说使用引用的地方用指针也可以实现,只不过要写更多的代码。
教科书上对引用这种数据类型讲得很简单,用它给变量起“别名”的作用甚至让人觉得它是多余的!
其实它真正的用武之地是在参数传递中!
众所周知在C语言中不论是从实参到形参,还是从局部变量到返回值,都是清一色的值传递。
值传递意味着全拷贝,不仅效率低下,更多的时候它也并非是你想要的语义。
试想你要去月球,现在从你身上取一个细胞克隆出一个与你同样的人,让它去完成你的探月计划,
然后回来给你讲它的所感所受,或许你能听得身临其境,并且它的成功证明换成你也行,但这是你想要的吗?
T fun(T t){return t;} void main() {T t; t=fun(t);}
在上面的代码中你能发现几个变量?
1.主函数main()中定义了局部变量t
2.调用fun()函数时,自动产生一个局部变量(也就是形参表中的变量t)用于接受实参的值
3.函数fun()返回它自己的形参变量t时,又自动了产生一个匿名临时变量用于存放返回值
T& fun(T& t){return t;} void main() {T t; t=fun(t);}
与上面的代码相比较,不存在第2个和第3个变量。
使用引用常见有以下几种情形:(很不全面,抛砖引玉)
情形一:返回函数实参 T& fun(T& t){return t;}
情形二:返回静态变量 T& fun(){static T t; return t;}
情形三:返回当前对象 T& T::fun(){return *this;}
情形四:返回新建对象 T& fun(){return *new T;}
注意与最后一种情形类似但不等价的指针形式如下:
T& fun(){T* pt=new T(); return *pt;} //除非显式调用delete,否则对象(*pt)不会被释放!
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!