引用作为函数返回值的情况
来源:互联网 发布:快递数据 编辑:程序博客网 时间:2024/05/01 22:44
什么情况下必须不能返回引用
1)重载操作符类似加减乘除这样,要返回一个右值的不能是引用。
2)不能返回函数内局部变量的引用。
什么情况下必须返回引用
重载操作符类似“=”“+=”这样的可继续作为左值使用的,要返回this指针的引用。
什么情况下返回的引用必须是const的
const成员函数不可改变对象内容,同时也不可通过函数返回值改变对象内容。 所以返回指向对象的指针或引用都会被编译器拦住的。 const指针或const引用不会改变对象内容,所以可以返回。
将“引用”作为函数返回值类型的格式、好处和需要遵守的规则?
格式:类型标识符 &函数名(形参列表及类型说明){ //函数体}
好处:在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的。因为随着该局部变量生存期的结束,相应的引用也会失效,产生runtime error!
注意事项:
(1)不能返回局部变量的引用。这条可以参照Effective C++[1]的Item 21。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。
(2)不能返回函数内部new分配的内存的引用。这条可以参照Effective C++[1]的Item21。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。
(3)可以返回类成员的引用,但最好是const。这条原则可以参照Effective C++[1]的Item20。主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性
格式:类型标识符 &函数名(形参列表及类型说明){ //函数体}
好处:在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的。因为随着该局部变量生存期的结束,相应的引用也会失效,产生runtime error!
注意事项:
(1)不能返回局部变量的引用。这条可以参照Effective C++[1]的Item 21。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。
(2)不能返回函数内部new分配的内存的引用。这条可以参照Effective C++[1]的Item21。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。
(3)可以返回类成员的引用,但最好是const。这条原则可以参照Effective C++[1]的Item20。主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性
- 引用作为函数返回值的情况
- 引用作为函数返回值
- 引用作为函数返回值
- 引用作为函数返回值
- 引用作为函数返回值
- 引用作为函数返回值
- 引用作为函数返回值
- 引用作为函数返回值
- 引用作为函数返回值
- 引用作为函数返回值
- 引用作为函数返回值
- 引用作为函数返回值
- “引用作为函数参数”与 “引用作为函数返回值”
- 指针作为函数返回值需要注意的情况
- 引用作为返回值的
- c++中引用作为函数的返回值
- aidl引用类作为函数的返回值
- 引用作为函数返回值的好处及使用
- HTTPS是如何保证连接安全:每位Web开发者都应知道的
- Reddit的科学:为什么有些想法能统治网络
- spoj 95
- HDU 2333 & POJ 3497 & UVA 12124 Assemble (二分答案)
- 鹊桥的长度
- 引用作为函数返回值的情况
- PE
- HDOJ 1297
- 概率DP问题整理(一)
- 百度地图不能从定位的BDLocation里获取地址怎么办?
- centos网卡配置
- 栈的链式存储及其基本运算
- 如何在github发布个人网站或开源项目-手把手教您制作并发布个人网站或主页(二)
- QT necessitas 给工程重命名