永发信息网

C++高手请进按引用返回值应注意什么

答案:1  悬赏:60  手机版
解决时间 2021-02-21 06:36
C++高手请进按引用返回值应注意什么
最佳答案
(1)不能返回局部变量的引用。这条可以参照Effective C++[1]的Item 31。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。
(2)不能返回函数内部new分配的内存的引用。这条可以参照Effective C++[1]的Item 31。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。
(3)可以返回类成员的引用,但最好是const。这条原则可以参照Effective C++[1]的Item 30。主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。
(4)流操作符重载返回值申明为“引用”的作用:
流操作符<<和>>,这两个操作符常常希望被连续使用,例如:cout << "hello" << endl; 因此这两个操作符的返回值应该是一个仍然支持这两个操作符的流引用。可选的其它方案包括:返回一个流对象和返回一个流对象指针。但是对于返回一个流对象,程序必须重新(拷贝)构造一个新的流对象,也就是说,连续的两个<<操作符实际上是针对不同对象的!这无法让人接受。对于返回一个流指针则不能连续使用<<操作符。因此,返回一个流对象引用是惟一选择。这个唯一选择很关键,它说明了引用的重要性以及无可替代性,也许这就是C++语言中引入引用这个概念的原因吧。赋值操作符=。这个操作符象流操作符一样,是可以连续使用的,例如:x = j = 10;或者(x=10)=100;赋值操作符的返回值必须是一个左值,以便可以被继续赋值。因此引用成了这个操作符的惟一返回值选择。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
请问淄博职业学院好考吗?春考护理专业。谢谢
鹿泉城区307国道何时不脏乱
龙江路/龙兴大街(路口)地址在哪,我要去那里
【篮球防守】篮球防守包括防无球队员和()。
赛车比赛的时候有的车在前有的车在后,不在同
有一四字成语第一个字是地的有哪些
石坪里纸厂地址在什么地方,想过去办事
创维XQB55-98洗衣机传动结构图
为什么上搜狐新闻评论刚评论完能看到,过一会
湛江市欢乐家食品有限公司怎么样
下列哪项不是细胞学说的主要内容A细胞是一个
毛坯和原房有什么区别?
宝马服装机械有限公司地址在什么地方,想过去
新浪微博如何快速增加粉丝?最新版的微博啊,
欧贝日韩童装馆地址有知道的么?有点事想过去
推荐资讯
在公开招标过程中,若已进行了资格预审,则施
我想考学前教育本科,各位对这个专业评价怎样
俄克拉荷马城市大学 Oklahoma City Universit
根据经验,配制混凝土时水泥强度等级(以MPa为
陈小线我想知道这个在什么地方
亨达利眼镜旗舰店在哪里啊,我有事要去这个地
天龙八部怎么取消结拜
浦江国际开元大酒店在什么地方啊,我要过去处
金利宾馆在什么地方啊,我要过去处理事情
银行卡密码忘了,是不是拿着身份证和银行卡当
什么音乐软件是通过唱歌 ,根据人声旋律来自
dnf怎么死神的邀请称号怎么得到
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?