、代入演算子は、以下のいずれかの形式を有することができる。代入演算子はいつconst T&、T&or Tを返すべきですか?この<a href="http://www.cplusplus.com/articles/y8hv0pDG/" rel="nofollow noreferrer">article</a>によれば
(1) MyClass& operator=(const MyClass& rhs);
(2) MyClass& operator=(MyClass& rhs);
(3) MyClass& operator=(MyClass rhs);
(4) const MyClass& operator=(const MyClass& rhs);
(5) const MyClass& operator=(MyClass& rhs);
(6) const MyClass& operator=(MyClass rhs);
(7) MyClass operator=(const MyClass& rhs);
(8) MyClass operator=(MyClass& rhs);
(9) MyClass operator=(MyClass rhs);
- 形態(2)、(5)及び(8)推奨されている代入演算子は変更しないでくださいために、そのパラメータ。これが必要なケースは考えられません。
- (3)、(6)、(9)の形式は、コピースワップイディオムに役立ちます。
- 私は、(7) - (9)はconstオブジェクト(構築後に変更されない)に対してのみ使用されるべきだと考えます。あれは正しいですか?
私の質問は:私はこれを使用する必要があるときはタイプMyClass
、MyClass &
またはconst MyClass &
を返しますか?
(2)、(5)、(8)は、「移動意味」のようなものを実装するために必要です。 – Scheff
[この正規の代入演算子のリファレンス](http://en.cppreference.com/w/cpp/language/operators#Assignment_operator)から: "標準的なコピー代入演算子は、参照によってlhsを返すことが期待されています" 。また、* copy *代入演算子はrhsを変更すべきではないので、好ましくは定数への参照であるべきです。値渡しは時には便利です(以前にリンクされた参照に見られるように)。 –
@Scheffいいえ、あなたは 'operator =(MyClass &&)'を考えています。質問には 'operator =(MyClass&)'があります。 – hvd