ale*_*zie 2 c++ operator-overloading
我有以下代码片段:
#include <iostream>
using namespace std;
struct Integer{
int x;
Integer(const int val) : x(val){}
friend Integer operator+(Integer& i, Integer& j){
return Integer(j.x + i.x);
}
friend std::ostream& operator<<(std::ostream& o, Integer i){
o << i.x;
return o;
}
};
int main(){
Integer i(25), j(5), k(2020);
std::cout << (i + j + k);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么不编译?我得到的错误是“不匹配'运算符+'(操作数类型为Integer and Integer)”。为什么会这样?不是从右到左计算的吗?是不是(j + k)一个Integer(2025),再加上i这是一个Integer(25)不应该的结果是显而易见的一个,meaing 2050年 我哪里错了?此外,我的目标是说明为什么该代码片段无法编译,以及如何通过最多修改一行代码来使其编译。(这是他们在考试中会问我们的问题)。谢谢 !
operator+按值返回,它返回的是一个右值,它不能绑定到非常量的左值引用,即不能operator+作为参数传递给下一个计算。
将参数类型的operator+左值引用更改为 const,它可以绑定到右值。
friend Integer operator+(const Integer& i, const Integer& j){
// ^^^^^ ^^^^^
return Integer(j.x + i.x);
}
Run Code Online (Sandbox Code Playgroud)