如果我重载了 operator+ 和 operator= 我还需要重载 operator+= 才能使这样的事情起作用:
MyClass mc1, mc2;
mc1 += mc2;
如果我重载了 operator+ 和 operator= 我还需要重载 operator+= 才能使这样的事情起作用:
MyClass mc1, mc2;
mc1 += mc2;
是的,您还需要定义它。
然而,一个常见的技巧是定义operator+=
,然后operator+
根据它实现,如下所示:
MyClass operator+ (MyClass lhs, const MyClass& rhs){
return lhs += rhs;
}
如果你反其道而行之(使用 + 来实现 +=),你会在 += 运算符中获得不必要的复制操作,这可能是性能敏感代码的问题。
operator+= 不是 + 和 = 的组合,因此您确实需要显式地重载它,因为编译器不知道为您构建难题。但是您仍然可以通过在 operator+= 中使用它们来从已经定义/重载的运算符中受益。
是的你是。
如果这里真正的问题是“我不想写一大堆重复的运算符,请告诉我如何避免它”,那么答案可能是:
http://www.boost.org/doc/libs/1_38_0/libs/utility/operators.htm
不过,语法看起来有点繁琐。由于我自己从未使用过它,因此我无法向您保证它真的很简单。