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 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
很好,你明白 (t2+t3) 的结果是个临时变量,也就是个右值(rvalue)。
可是只有const引用类型可以引用临时变量,而你的重载加法函数要求的参数却是个非const类型。所以无法调用。
就算你换成 Time(1,2,3)也一样,这也是临时构造了一个Time对象,同样无法匹配参数类型。
改成这样就好了 Time operator+(const Time &t)
onemoo
TA贡献883条经验 获得超454个赞
回复中写不开,再答一贴:
简单地说,一句话:C++语法规定如此。
而仔细想想,按道理也应该如此:
如果允许普通引用类型可以引用临时变量,那么你是可以通过这个引用来“读”/“写”这个临时变量的。
既然能向这个引用写入值,那么程序员可能会期待在后面的程序中能继续使用这个引用,然而这个引用实际上只是个临时变量,随时会被销毁。 并且允许更改临时变量的值也没什么意义(如: 代码中的(t2+t3) ,这里只是想“读取”它的值,允许你写入它或修改它的值有什么意义呢?)。
所以语言干脆规定只有const引用才能引用临时变量。
- 2 回答
- 0 关注
- 1440 浏览
添加回答
举报
0/150
提交
取消