右辺値参照パラメーターが左辺値引数にバインドできる理由
C では、右辺値参照は右辺値にバインドされることが期待されます。ただし、多くのプログラマを驚かせるように、右辺値参照パラメータが左辺値引数と一致する場合があります。
次のコードを考えてみましょう。
void f(T&&); // #1 void f(T&); // #2
通常、f(T&&) が期待されます。 rvalue を渡すときに呼び出されるオーバーロード、および lvalue の f(T&) オーバーロード。ただし、動作は異なります。
void g(T&& t) { f(t); // calls #2 }
この例では、t が右辺値であっても f(T&) オーバーロードが呼び出されます。これは、右辺値参照型にもかかわらず、t が左辺値とみなされるために発生します。
理論的根拠:
右辺値は通常、名前のないエンティティ、または名前を失うエンティティです。すぐに名前を付けます。右辺値参照は右辺値にのみバインドできます。ただし、 t には名前があり、その有効期間はすぐには期限切れになりません。
型 T&&:
T&& は右辺値参照の型です。これは右辺値にのみバインドできますが、それ以外の場合は右辺値参照型の左辺値として動作します。その右辺値参照の性質は、構築中および decltype(variable_name) の実行時にのみ重要です。
std::move():
std::move( ) を実行して右辺値参照を返します。 static_cast
関連ルール:
以上がC で右辺値参照パラメータを左辺値引数にバインドできるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。