関数内で右辺値参照が左辺値のように動作するのはどのような場合ですか?
以下のコード スニペットでは、関数 foo が右辺値参照を受け取りますbar という名前のパラメータ。
void foo(string&&& bar) { string* temp = &bar; cout << *temp << " @:" << temp << endl; }
このコードは疑問を引き起こしました。bar は、bar として扱われるのですか?アドレスを取得できるため、関数内の左辺値を指定しますか?
バーは右辺値または左辺値ですか?
この質問は基本的に質問自体の中で答えられます。名前を持つものはすべて左辺値です。したがって、bar は左辺値として認識されます。ただし、bar には「文字列への右辺値参照」の type があることに注意することが重要です。
bar を右辺値として扱うには、それに std::move() を適用する必要があります。 .
左辺値と右辺値を区別する理由References?
この区別は、各参照型に何がバインドできるかを考えるときに重要になります。左辺値は左辺値参照にバインドできますが、右辺値は右辺値参照にバインドできます (そして、const への左辺値参照には何でもバインドできます)。
言い換えると、右辺値を左辺値参照にバインドすることはできず、その逆も同様です。
右辺値参照型のパラメータ
関数のパラメータを扱う場合右辺値参照型の場合、参照が指す値についてこれが何を意味するかを理解することが不可欠です。右辺値参照は、それに割り当てられた値が右辺値であることを示します。その結果、式が終了するとリソースが解放され、右辺値として管理できるようになります。
右辺値参照の受け渡し
さらに右辺値参照パラメータを渡す場合、 2 つのオプションがあります:
結論
左辺値参照と右辺値参照の違いは、その違いにありません。一度獲得した行動ではなく、それらを結び付けることができるものにあります。この理解は、関数内の参照を効果的に処理および管理するために不可欠です。
以上が関数内で右辺値参照が左辺値のように動作するのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。