4

如果我重载了 operator+ 和 operator= 我还需要重载 operator+= 才能使这样的事情起作用:

MyClass mc1, mc2;
mc1 += mc2;
4

4 回答 4

26

是的,您还需要定义它。

然而,一个常见的技巧是定义operator+=,然后operator+根据它实现,如下所示:

MyClass operator+ (MyClass lhs, const MyClass& rhs){
  return lhs += rhs;
}

如果你反其道而行之(使用 + 来实现 +=),你会在 += 运算符中获得不必要的复制操作,这可能是性能敏感代码的问题。

于 2009-07-07T13:51:12.457 回答
8

operator+= 不是 + 和 = 的组合,因此您确实需要显式地重载它,因为编译器不知道为您构建难题。但是您仍然可以通过在 operator+= 中使用它们来从已经定义/重载的运算符中受益。

于 2009-07-07T13:37:08.370 回答
7

是的你是。

于 2009-07-07T13:29:28.847 回答
2

如果这里真正的问题是“我不想写一大堆重复的运算符,请告诉我如何避免它”,那么答案可能是:

http://www.boost.org/doc/libs/1_38_0/libs/utility/operators.htm

不过,语法看起来有点繁琐。由于我自己从未使用过它,因此我无法向您保证它真的很简单。

于 2009-07-07T14:05:31.110 回答