gpt4 book ai didi

c++ - 为什么在具有多个参数的重载 operator+ 中通过 const 引用传递

转载 作者:太空宇宙 更新时间:2023-11-03 10:23:57 25 4
gpt4 key购买 nike

我正在使用多个参数进行 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;
}

无法编译返回“no match for operator+”。我阅读并理解了 ((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)
// ^^^^^^^^^ ^^^^^^^^^

ab左值引用


当你写作时

Integer d = a+b+c;

a+b 生成Integer 类型的rvalue,它不绑定(bind)到Integer&


具有const Integer & 的版本作为const 左值引用可以绑定(bind)到lvaluesrvalues .

关于c++ - 为什么在具有多个参数的重载 operator+ 中通过 const 引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47773497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com