函数的引用返回值
来源:互联网 发布:勇士队格林t袖淘宝 编辑:程序博客网 时间:2024/05/16 23:37
引用是给变量取一个别名,所以引用传递会直接进行变量本身的传递。它的最大好处是可以把别处对变量的改变保留下来,第二好处是它提高了性能:如果函数的返回值是一个引用,那么,如上文所说,它会节约一组构造、赋值和析构过程。但是,函数返回引用往往会带来一些意想不到的错误:比如返回临时变量的引用。 //一个错误的函数 int &Max(int i, int j) { return i>j ? i : j; } 以上函数的错误在于,i和j在函数结束后会被释放。对它们的引和也将失效。如果用这个返回值给别的变量赋值,将会获得一个垃圾。VC++.Net会对以上return语句显示警告。 那么,如果返回一个全局变的引用呢?这当然是可以的,但是,一来程序设计中不建议使用过多的全局变量,二来全局变量即使不返回也可以访问。这样做的唯一用途就是把函数做右值来给其它变量赋值。 int m;//全局变量 int &MaxByGlobal(int i, int j) { return m = i>j ? i : j; } int a, b, c; c = MaxByGlobal(a, b);//用法一、用返回值赋值 MaxByGlobal(a, b); c = m;//用法二、不用返回值赋值 当然,以上这个MaxByGlobal函数也不是一无是处,能用返回值来进行赋值会给程序带来更好的可读性。只是这样的函数设计本身不被建议。 那么,函数返回引用用得最多的就是返回形参了。因为形参可以用引用传递,引用的形参不是函数内部的局部变量,这样做是可取的: int &MaxByRef(int &i, int &j) { return i>j ? i : j; } 上面这个函数和上文中的“int Max(int i, int j)”函数如此相似,但是它省去了三次构造、赋值和析构。 另外一种用法就是在类的成员函数中返回类对象自身了,典型的是“operator +=”函数之类。 MyClass &MyClass::operator +=(const MyClass &other) { //某些语句 return *this; } 以上函数返回的是自身的引用。因为类的成员函数也可以写成全局函数“MyClass &operator +=(MyClass &Left, const MyClass &right)”,而且在类成员函数的调用中实际存在着this指针的传递。所以,以上这个函数依然可以看作返回了形参的引用。 对于返回引用的函数,还有一个好玩的现像。即返回值还可能可以被赋值。如“(a += b) = c;”这样的形式。这种写法明显不伦不类,但是如果函数返回了非const的引用,这个表达式的确是合理的。所以,上面的“operator +=”函数还要修改一下,将返回值由“MyClass&”改为“const MyClass&”。 返回引用并不是处处可用的,正如《引用传递的应用范围》中提到的一样:不能用引用来传递临时值。有时候我们的确要产生一个临时对象并返回它,那就不能返回引用。典型的有“operator +”函数: const MyClass MyClass::operator +(const MyClass &other) const { MyClass Temp; //某些语句 return Temp;//这里只能返回对象,因为Temp必须是局部变量 }
- 函数的引用返回值
- 函数的引用返回值
- 返回引用的函数
- 函数的引用返回
- 函数的引用返回
- 函数的返回引用
- 函数的引用返回
- 返回引用的函数
- 函数返回值 返回引用
- 引用返回函数值
- 函数返回引用类型的值
- 引用作为函数返回值的情况
- C++ 函数的引用返回值
- c++函数返回值的引用
- 类成员函数返回值的引用
- 函数的返回值是引用
- 引用型的函数返回值
- 函数的引用返回左值
- ORACLE 9I安装参考
- 卸载破解安装vs2005
- 安装Oracle注意事项和重装步骤
- 专家看台:程序员太幸福了,想做管理很危险
- SQLite研究——性能优化
- 函数的引用返回值
- 加速动态网站 MySQL索引分析和优化
- 卸载Oracle的步骤
- 重新开始
- 专家看台:盛大架构师周爱民回顾职业历程,分享十项建议
- vs.net已检测到web服务器运行的不是asp.net1.1版"故障的排除--KuNeT
- malloc/free和new/delete的区别
- 用VS.net创建web项目时报告http://1.1 500 internal Server Error错误的解决办法 ← ASP.NET论坛 ← 华软编程论坛
- 投资银行简述