C++ 重载运算符+=和两个类
我有两个类,让我们称它们为A和B。我在类A中重载了运算符+=现在我想做这样的事情:C++ 重载运算符+=和两个类,c++,operator-overloading,overloading,C++,Operator Overloading,Overloading,我有两个类,让我们称它们为A和B。我在类A中重载了运算符+=现在我想做这样的事情: A += B + B + B 类B没有重载运算符+,这是一个问题,因为求值是从右到左的,它希望将所有的B相加,然后将+=结果加到a。 有没有什么方法可以在不重载B类运算符+的情况下实现我的目标 有没有什么方法可以在不重载B类运算符+的情况下实现我的目标 一句话,不 A::operator+=将B作为输入,因此如果您希望A+=B+B+B工作,您需要一种将B对象添加到一起的方法,以生成一个新的B+=可以作为输入,而
A += B + B + B
类B没有重载运算符+,这是一个问题,因为求值是从右到左的,它希望将所有的B相加,然后将+=结果加到a。
有没有什么方法可以在不重载B类运算符+的情况下实现我的目标
有没有什么方法可以在不重载B类运算符+的情况下实现我的目标
一句话,不
A::operator+=将B作为输入,因此如果您希望A+=B+B+B工作,您需要一种将B对象添加到一起的方法,以生成一个新的B+=可以作为输入,而这正是operator+的用途。这是可能的
不必重载加法运算符,您可以使B隐式地与算术类型转换。一个演示,根据要求不需要为B重载运算符+,但允许您希望的精确表达式:
struct B {
B() = default;
// this constructor makes B convertible from int
B(int){}
// this operator makes B convertible to int
operator int() {
return 42;
}
};
struct A {
A& operator+=(const B&) {
return *this;
}
// alternative:
// if you use this, then B does not need to convert from int
// A& operator+=(int)
};
int main() {
A A;
B B;
A += B + B + B;
}
A+=B;A+=B;A+=B;?不需要重载运算符+似乎是一种任意限制。我建议你考虑这是否重要。+=右到左关联,所以你不能做一个像+= B+= B+= B的东西,因为它被解析为+= B+= B+= B,但是如果你写的东西像IoSokes,你能做一个+= B+= B+= B吗?我真的不能修改转录。所以处理这个问题的唯一方法是为类B实现操作符+。