C++函数返回值为引用类型时出错!大神进! 我不是大神,但我大概知道你是怎么回事。你的参数是const string&类型,首先你要知道string&前为什么要加const.还有你要知道const对象和非const对象的区别在哪里。对象前加const,则只能调用该对象的const方法,换句话说,不能对其进行任何内容上的修改。而传&是因为要避免复制构造,所以参数为const string&.那么再来说说你的函数体内的这行代码,首先word+ending将产生一个临时对象,因为调用了string内部的string operator(const string&lhs,const string&rhs)函数。基于此,你的函数就不能返回引用。因为函数体内的临时对象在函数出栈之后会被销毁。所以除非你取消+号,只返回某个参数。不然就不能返回引用!接下来说说你的const问题。因为你的参数是const的,但是你返回的时候却把const给取消了,返回了string&.这是绝对不允许的。你可以想象,const对象是对普通对象的一种限制,那么由普通对象变成const对象,这种是允许的,因为限制没有被放大。但是反过来,由一个const对象变成普通对象,你试图放大这种限制就不被允许了。除非你使用C++提供的const_cast转换!返回引用类型的将“引用”作为函数返回值类型 格式:类型标识符&函数名(形参列表及类型说明){/函数体 }好处:在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的。因为随着该局部变量生存期的结束,相应的引用也会失效,产生runtime error。注意事项:(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)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得。C++函数的返回类型声明为一个右值引用类型,会发生什么事情? std:move 实际上是什么也没做。move语义的实现是靠move ctor 来完成了的。所以,我想知道的是,除了用来…c语言初级编程题,函数返回值有两种类型,比如char和float,定义时应该怎么写啊? 只能改成 input(char*studname,float*score)将参数声明为指针同时返回两个值的函数方式没有,声明为指针相当于返回了两个值c++有引用传递,也可以
随机阅读
- 如何评价美剧《火线》(The Wire)? 比安奇住宅分析
- 社区护理家庭访视虐待老人话剧 大家怎样看待家庭暴力,有亲身经历或者身边的人有所经历的,是怎样...
- 怀孕长黑痣是因为什么 好吗?为什么怀孕后肚皮上会长痣呢?是什么原因呢?
- 数学物理方程谷超豪第三版答案第三章答案 求数学物理方程课后答案谷超豪第三版的,网上搜的只有第一章答案,有没有全书答案的
- 碱液氧化塔酸洗 酸碱洗涤塔的工作原理
- 文学经典的当代价值认识看法 怎么评价现代文学?
- 求分享网盘楚乔传主题曲由张碧晨和赵丽颖演唱的《望》mp3,麻烦直接给 张碧晨和赵丽颖演唱会
- 赤水市贵福金街歌厅 赤水贵福金街到赤水大瀑布怎么坐车
- 有谁知道佛山哪里有百合花花场? 2017里水万顷洋花海
- 实验室制取二氧化硫的方程式
- 校园欺凌自查班级总结 实验学校校园欺凌专项治理自查报告
- 太空电梯的技术难题与意义? 塔吊运力分析
- [明星动态]杨迪教THE9跳俏夕阳版yesok 杨迪跳sheep完整版
- 开式水循环系统怎么排气 开式冷却水系统与闭式冷却水系统的区别
- 中国制造出第一台双水内冷汽轮发电机是在什么时候问世的? 双水内冷发电机转子如何进水
- 烧开的水冷却后可以养鱼吗?、 烧开水冷却可以养鱼吗
- 眉县和周至,哪个是猕猴桃之乡? 武功县果业局冷库补助
- 经济学考研真的那么难考吗 经济学考研比较容易考的
- 嘉兴永丰余纸业怎么样 嘉兴永丰余纸板公司
- 暴雪音乐会上《狮王之傲旅店》在哪里可以找到手机铃声下载? 狮王之傲旅店音乐铃声