私は最近読んだ(そして残念ながらどこを忘れた)、operator=を書く最良の方法は次のようになっている:
foo &operator=(foo other)
{
swap(*this, other);
return *this;
}
これの代わりに:
foo &operator=(const foo &other)
{
foo copy(other);
swap(*this, copy);
return *this;
}
考え方は、operator =が右辺値で呼び出された場合、最初のバージョンはコピーの構築を最適化できるということです。したがって、右辺値で呼び出された場合、最初のバージョンの方が高速であり、左辺値で呼び出された場合、2つは同等です。
他の人がこれについてどう思うか知りたいですか?明確性の欠如のために、人々は最初のバージョンを避けますか?最初のバージョンが良くなる可能性があり、決して悪くなることはないというのは正しいですか?