4
我々は、すべてのFoo
のコピーコンストラクタが副作用を持っている場合でも値のコピーが取られないように新しい変数を導入して戻り値の最適化を無効にしますか?
Foo returnAFoo()
{
return Foo();
}
が戻り値の最適化でコンパイルされますことを知っています。しかしwill
Foo returnAFoo()
{
Foo f = Foo();
return f;
}
too? 2番目の構文は、デバッグ時に役立ちます。しかし、私はそうすることで重要な最適化を捨てていますか?おそらく私は明示的な移動コンストラクタを書く必要がありますか?
注意*名前付き*戻り値最適化(NRVO)と呼ばれる戻り値最適化の特定の変形があります。通常の「RVO」よりも難しい場合もありますが、一般的にはコンパイラが実行できます。両方ともオブジェクトを動かすこととはまったく異なります。明示的なコピーコンストラクタ/代入演算子を持っている場合は、明示的に移動コンストラクタ/代入演算子も定義する必要があります。 – BoBTFish
@BoBTFish:答えとしてそれを入れてください:私はそれを受け入れます。 –
http://cpp.sh/9yvs –