欢迎来到天天文库
浏览记录
ID:24408435
大小:59.57 KB
页数:3页
时间:2018-11-14
《c笔试题目:将"引用"作为函数返回值类型的格式、好处和需要 》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、C++笔试题目:将”引用”作为函数返回值类型的格式、好处和需要格式:类型标识符函数名(形参列表及类型说明){//函数体}好处:在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的因为随着该局部变量生存期的结束,相应的引用也会失效产生runtimeerror!注意事项:(1)不能返回局部变量的引用。这条可以参照EffectiveC++[l]的Item31。主要原因是局部变量会在函返回后被销毁,因此被返回的引用就成为了”无所指”的引用,程序会进入未知状态。(2)不能返回函数内部new分配的内存的引用
2、。这条可以参照EffectiveC++[l]的Item31。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memoryleak。(3)可以返回类成员的引用,但最好是const。这条原则可以参照EffectiveC++[l]的Item30。主要原因是当对象的属性是与某种业务规则(businessrule)相关联的时候,其赋值常常与某些其它属性或者对
3、象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。(4)流操作符重载返回值申明为“引用”的作用:流操作符〉,这两个操作符常常希望被连续使用,例如:cout对于返回一个流指针则不能连续使用这个操作符象流操作符一样,是可以连续使用的,例如:x=j=10;或者(x=10)=100:赋值操作符的返回值必须是一个左值,以便可以被继续赋值。因此引用成了这个操作符的惟一返回值选择。例3^includeintput(intn);intvals[1
4、0]:interror=-l;voidmain(){put(0)=10://以put(0)函数值作为左值,等价于Vals[0]二10;put(9)=20;//以put(9)函数值作为左值,等价于vals[9]=20;coutintput(intn)if(n〉=0nelse{cout}(4)在另外的一些操作符中,却千万不能返回引用:+_*/四则运算符。它们不能返回引用,EffectiveC++[1]的Item23详细的讨论了这个问题。主要原因是这四个操作符没有sideeffect,因此,它们必须构造一个对象作为返回值,可选的方案包括:返
5、回一个对象、返回一个局部变量的引用,返回一个new分配的对象的引用、返回一个静态对象引用。根据前面提到的引用作为返回值的三个规则,第2、3两个方案都被否决了。静态对象的引用又因为((a+b)==(c+d))会永远为true而导致错误。所以可选的只剩下返回一个对象了。
此文档下载收益归作者所有