0

仮定

  • 私には機能がありますA f()
  • ローカル変数を;aの戻り値に初期化したい。f
  • 私は RVO に頼りたくありません。

f次の場合にコピーされる戻り値を回避するための最良のオプション (およびその理由) は何ですか?

  1. a変更する必要がある場合があります
  2. 私はそれaが変更されないことを知っています

オプション:

a) A a = f(); b) A&& a = f(); c) const A& = f(); d)const A&& = f();


編集:

私はこう言います:

  1. b)
  2. c)

どちらも参照を使用し、余分なコピーを回避するためです (RVO でも回避できますが、保証はされません)。では、ほとんどの場合、オプション a) が提案されているのはなぜですか?

質問の核心は次のとおりだと思います: a) は c) と同じ効果を持つ可能性が最も高いので、a) の代わりに c) を使用して、物事を明示的かつコンパイラーに依存しないようにしないのはなぜですか?

4

2 に答える 2

2

class Amove-constructor がある場合は、RVO または NRVO の最適化だけに頼ることができることA a = f(); について何も知らない場合は、そのまま使用してください。class A

于 2013-08-26T14:15:36.747 に答える