• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

求大触解释关于c++运算符重载

Time operator+(Time &t)
        {
                return Time(m_iHour+t.m_iHour,m_iMinute+t.m_iMinute,m_iSecond+t.m_iSecond);
        }
main中:
        Time t(6, 30, 20),t1(1,3,4),t2=t1,t3=t2;
        ((t+t1)+(t2+t3)).display();
显示报错:[Error] no match for 'operator+' (operand types are 'Time' and 'Time')


小白表示不明白了,求解释 T-T  虽然t2+t3的结果是一个临时变量但也得在整条语句结束后才释放不是吗?那么在t+t2的结果与t2+t3的结果调用“+”时,虽然传的是临时变量,但在使用期间不是安全的吗?之前也用typeid检查过临时变量也是Time的对象。。。。 0.0 为啥报的错表示是对于运算符+没有匹配啊   。0.0 。。若将t2+t3的括号去掉则没用这种问题,将其换成Time(1,2,3)也会出现这种问题。。。。   小白表示跪死了。。求大触解释。。。

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与2

很好,你明白 (t2+t3) 的结果是个临时变量,也就是个右值(rvalue)。
可是只有const引用类型可以引用临时变量,而你的重载加法函数要求的参数却是个非const类型。所以无法调用。
就算你换成Time(1,2,3)也一样,这也是临时构造了一个Time对象,同样无法匹配参数类型。


改成这样就好了 Time operator+(const Time &t)

使用道具 举报

回复中写不开,再答一贴:
简单地说,一句话:C++语法规定如此。


而仔细想想,按道理也应该如此:
如果允许普通引用类型可以引用临时变量,那么你是可以通过这个引用来“读”/“写”这个临时变量的。
既然能向这个引用写入值,那么程序员可能会期待在后面的程序中能继续使用这个引用,然而这个引用实际上只是个临时变量,随时会被销毁。 并且允许更改临时变量的值也没什么意义(如:代码中的(t2+t3) ,这里只是想“读取”它的值,允许你写入它或修改它的值有什么意义呢?)。
所以语言干脆规定只有const引用才能引用临时变量

使用道具 举报

发新帖

发布任务需求已有1031164位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!