为什么在带有多个参数的重载运算符+中传递const引用

甘志隆

我正在使用以下多个参数进行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产生一个不绑定到的类型右值IntegerInteger&


随着版本const Integer &的作品作为const左值引用可以绑定到两个左值右值

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章