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