仮定
- 私には機能があります
A f()
。 - ローカル変数を;
a
の戻り値に初期化したい。f
- 私は RVO に頼りたくありません。
f
次の場合にコピーされる戻り値を回避するための最良のオプション (およびその理由) は何ですか?
a
変更する必要がある場合があります- 私はそれ
a
が変更されないことを知っています
オプション:
a) A a = f();
b) A&& a = f();
c) const A& = f();
d)const A&& = f();
編集:
私はこう言います:
- b)
- c)
どちらも参照を使用し、余分なコピーを回避するためです (RVO でも回避できますが、保証はされません)。では、ほとんどの場合、オプション a) が提案されているのはなぜですか?
質問の核心は次のとおりだと思います: a) は c) と同じ効果を持つ可能性が最も高いので、a) の代わりに c) を使用して、物事を明示的かつコンパイラーに依存しないようにしないのはなぜですか?