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

1 c++ const operator-overloading pass-by-reference

我正在使用多个参数进行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;
}
Run Code Online (Sandbox Code Playgroud)

它无法编译并返回"不匹配运算符+".我阅读并理解了多个参数的算法((a + b)+ c).为什么它不起作用?但是,我发现了两种方法可以使它工作:

friend Integer operator+ (const Integer & a,const Integer & b){
    Integer I (a.value+b.value);
    return I;
};
Run Code Online (Sandbox Code Playgroud)

friend Integer & operator+ (Integer & a,Integer & b){
    Integer I (a.value+b.value);
    return I;
};
Run Code Online (Sandbox Code Playgroud)

但我不知道为什么.谢谢

Vit*_*meo 8

看看你的operator+签名:

friend Integer operator+ (Integer & a, Integer & b)
//                        ^^^^^^^^^    ^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

a并且b左值参考.


当你写作

Integer d = a+b+c;
Run Code Online (Sandbox Code Playgroud)

a+b产生一个类型的右值Integer,它不绑定Integer&.


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