gpt4 book ai didi

c++ - 关于运算符+重载

转载 作者:行者123 更新时间:2023-12-02 02:09:05 28 4
gpt4 key购买 nike

我有以下代码片段:

#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;
}

为什么不能编译?我收到的错误是“与‘operator+’不匹配(操作数类型为整数和整数)”。为什么会出现这种情况?计算不是从右到左进行的吗? (j + k) 不是一个 Integer(2025),加上 i 是一个 Integer(25) > 结果不应该是显而易见的吗,即 2050 年?我哪里错了?另外,我的目标是告诉为什么该代码片段无法编译,以及如何通过最多修改一行代码来使其编译。 (这是他们在考试时会问我们的问题)。谢谢!

最佳答案

operator+ 按值返回,它返回的是右值,不能绑定(bind)到非常量的左值引用,即不能传递给 operator+ 作为下一次计算的参数。

operator+的参数类型更改为const的左值引用,这样可以绑定(bind)到右值。

friend Integer operator+(const Integer& i, const Integer& j){
// ^^^^^ ^^^^^
return Integer(j.x + i.x);
}

关于c++ - 关于运算符+重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67946835/

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