別の回答によると、右辺値の参照は、それを参照する式がxvalue式である場合、一時的なものの存続期間を延長しません。右辺値参照を返すのでstd::move
、それを呼び出す式はx値であり、次のようにぶら下がっている参照になります。
int main()
{
std::string&& danger = std::move(get_string()); // dangling reference !
return 0;
}
それはいいです。ここstd::move
では意味がありません。すでに右辺値です。
しかし、ここで私は空白を描いています。これは、引数としてxvalue式を渡すこと、完全に標準的な使用法、std::move
および右辺値参照とどのように異なりますか?
void foo(const std::string& val);
// More efficient foo for temporaries:
void foo(std::string&& val);
int main()
{
std::string s;
foo(std::move(s)); // Give up s for efficiency
return 0;
}
prvalueまたはxvalueのどちらであるかに関係なく、一時的なものの存続期間を延長する右辺値参照引数の特別なルールはありますか?または、std::move
呼び出し元の式は、すでに右辺値であるものを渡したため、xvalueのみですか?とにかくxvalueである右辺値参照を返すので、私はそうは思いません。私はここで混乱しています。私は愚かな何かが欠けていると思います。