我正在使用以下多个参数进行operator +重载。
#include <iostream>
using namespace std;
class Integer{
int value;
public:
Integer(int i) {value=i;};
int getValue() { return value;};
friend Integer operator+ (Integer & a, Integer & b){
Integer I (a.value+b.value);
return I;
};
};
int main() {
Integer a(1), b(2), c(3);
Integer d = a+b+c;
cout<<d.getValue()<<endl;
return 0;
}
它不能编译并返回“运算符+不匹配”。我阅读并理解了((a + b)+ c)多参数的算法。为什么不起作用?但是,我发现了两种使它起作用的方法:
friend Integer operator+ (const Integer & a,const Integer & b){
Integer I (a.value+b.value);
return I;
};
和
friend Integer & operator+ (Integer & a,Integer & b){
Integer I (a.value+b.value);
return I;
};
但是我不知道为什么。谢谢
查看您的operator+
签名:
friend Integer operator+ (Integer & a, Integer & b)
// ^^^^^^^^^ ^^^^^^^^^
a
并且b
是左值引用。
当你写
Integer d = a+b+c;
a+b
产生一个不绑定到的类型的右值。Integer
Integer&
随着版本const Integer &
的作品作为const
左值引用可以绑定到两个左值和右值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句