私は (N)RVO について読んでいて、1 つの完全なシナリオの説明が欲しいです。この質問が他の C++ 学習者のアイデアを明確にするのに役立つことを願っています。
次のシナリオを想定します。
string get_string() {
string x("racecar");
//work on x...
return x;
}
string a( get_string() );
string b = get_string();
C++11 の move-semantics はしばらく無視してください。
- (N)RVO が実行されない場合、いくつのコンストラクター/代入/デストラクタが実行されますか? (それらが参照するオブジェクトを指摘してください)
- (N)RVOを適用すると何が変わる?
std::string
最後に、移動セマンティクスをサポートするC++11 で状況がどのように変化するかを説明します。