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
ただし、構文は少し面倒に見えます。私は自分で使ったことがないので、本当に簡単だとは言えません。