附加运算符,以引用方式传递

时间:2014-01-18 00:54:46

标签: c++ operator-overloading

我正在尝试使用以下原型重载加法运算符:

obj operator+(obj&, obj&);

适用于a+b但会在a+b+c

上触发错误

g ++吐出以下错误:

test.cpp:17:6: error: no match for ‘operator+’ in ‘operator+((* & a), (* & b)) + c’
test.cpp:17:6: note: candidates are:
test.cpp:10:5: note: obj operator+(obj&, obj&)
error: no match for 'operator+' in 'operator+(obj&, obj&) 
note: candidates are: obj operator+(obj&, onj&) 

2 个答案:

答案 0 :(得分:3)

问题是你的参数是一个非const引用,操作符返回一个新对象。

因此,a+b计算临时对象,该临时对象不能按照标准绑定到非const引用。因此,它不能作为参数传递给operator+。 @chris建议,解决方案最有可能使用const引用,因为您不应该修改operator+的操作数。

没有人会这么想,因此我个人认为这样做会很糟糕。

答案 1 :(得分:0)

您可以假设等式的左侧始终引用“this”对象,这意味着您可以将重载运算符的签名更改为:

obj operator+(const obj &other){
    // Add value of "this" to value of other
    // Return obj
}