According to another answer、それを参照する式がxvalue式である場合、rvalue参照は一時的な存続期間を延長しません。大丈夫ですrvalue参照での一時的な存続期間の延長
int main()
{
std::string&& danger = std::move(get_string()); // dangling reference !
return 0;
}
:std::move
は右辺値参照を返すので、それを呼び出すの発現ははxValueので、ダングリング参照した次の結果です。 std::move
はここで意味をなさない。それは既に価値である。
ここで私は空白を描いています。 xvalue式を引数として渡すこととはどのように違いますか?std::move
とrvalue参照の完全な標準使用ですか?
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だけですか?とにかくrvalue参照を返すので、私はそうは考えていません。これはxvalueです。私はここで混乱している。私は何か愚かなことを逃していると思う。
無関係:関数 'foo'がいずれかの方法でコピーまたは移動しようとしている場合は、値を引数として引数を取り、コンパイラにコピーまたは移動させます。 –
最初の例の注意: 'std :: move(get_string())'は一時的な式ではありません。一時的な表現は 'get_string()'でしたが、それをキャストしました。したがって、参照への一時的な式のバインディングに関するルールは適用されなくなりました。 –