https://web.archive.org/web/20120707045924/cpp-next.com/archive/2009/08/want-speed-pass-by-value/に出くわしました
著者のアドバイス:
関数の引数をコピーしないでください。代わりに、それらを値で渡し、コンパイラーにコピーさせます。
ただし、この記事に示されている 2 つの例でどのような利点が得られるかはよくわかりません。
// Don't
T& T::operator=(T const& x) // x is a reference to the source
{
T tmp(x); // copy construction of tmp does the hard work
swap(*this, tmp); // trade our resources for tmp's
return *this; // our (old) resources get destroyed with tmp
}
対
// DO
T& operator=(T x) // x is a copy of the source; hard work already done
{
swap(*this, x); // trade our resources for x's
return *this; // our (old) resources get destroyed with x
}
どちらの場合も、追加の変数が 1 つ作成されるため、メリットはどこにあるのでしょうか? 私が見る唯一の利点は、一時オブジェクトが2番目の例に渡された場合です。