のは、我々はこのような状況にこの状況でRVOが適用されていますか?
std::string v_1()
{
return "name";
}
std::string test = v_1();
があるとしましょうRVOは、ここで適用されていますか? RVOを適用するルールの1つが「」であるため、答えは「いいえ」と考えられます。関数が値によってクラスタイプを返し、returnステートメントの式が自動記憶期間を持つ非揮発性オブジェクトの名前である場合、isn関数の戻り値の型と同じ型(最上位のcv-qualificationを無視する)を持つをコピーしてコピー/移動を省略した場合 " この状況では返されるオブジェクトには関数の戻り値の型と同じ型はありませんが、ここでRVOが適用されていないことは100%ではありません。
ありがとうございました。
PS。この話ではhttps://www.youtube.com/watch?v=AKtHxKJRwp4(分40秒18)MicrosoftのStephanは、関数の戻り値の型が返されたオブジェクトの型と異なるため、RVOを適用できない状況について説明しています(この例ではタプル対)。私は同じ原則がここに当てはまると思います。
ほとんどの場合、 'return std :: string(" name ")'に相当します... – Jarod42
返されるのは 'const char *'ではありません... – user268396
@ user268396ケース(これも)暗黙的に1に変換されてから文字列に変換されます:) –