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 に答える