3

クラスを作成して返す関数があるとします。

Foo getFoo ()
{
   return Foo ("bar");
}

そして2番目の方法:

Foo getFoo ()
{
   Foo foo ("bar");
   return foo;
}

今、私はそれをconst Foo & myFoo = getFoo()

最初の方法はより効率的ですか? どちらも一時変数を作成して返すので、私には同じように見えましたが、間違っていますか?

4

1 に答える 1

4

それらは基本的に同じですが、最初のコピー省略は「戻り値の最適化」(RVO) と呼ばれ、2 番目のコピー省略は「名前付き戻り値の最適化」(NRVO) と呼ばれます。ある時点で、RVO は実行できるが NRVO は実行できないコンパイラがありました。

于 2012-10-27T15:47:15.500 に答える