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)
但我不知道为什么.谢谢
看看你的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左值引用可以绑定到两个左值和右值.
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |