代入演算子を定義するときは、常に次のようになります。
class X {...};
X& X::operator=(...whatever...);
つまり、戻り値の型は「X への参照」です。ここで、パラメーター ( ...whatever...) はX&、コピー アンド スワップ イディオムを使用する場合const X&のみ、またはその他の型にすることができます。X
パラメータに関係なく、への非 const 参照を返すXことを誰もが推奨しているのは奇妙に思えます。(a = b).clear()これは、良いと思われるのような表現を明示的に許可します。
私は別の意見を持っており、私のコードでも(x=y).clear、 、 のような表現を禁止したいと考えています。私の考えでは、これらの式は 1 行のコードで複雑すぎることを行います。そこで、代入演算子を返すことにしました。(x=y)=zx=y=zvoid
void X::operator=(X) {...}
void X::operator=(int) {...}
これにはどのような悪影響がありますか? (見た目がいつもと違う以外は)
クラス X を標準コンテナ (例: std::vector<X>) で使用できますか?
私は C++03 を使用しています (問題がある場合)。