右辺値参照変数を理解する
C では、右辺値参照は、右辺値 (名前のない値) にのみバインドできる特殊なタイプの参照です。 )。ただし、関数が左辺値参照と右辺値参照の両方のオーバーロードでオーバーロードされると、驚くべき動作が発生します。
混乱: 左辺値と同様に動作する右辺値参照変数
次の関数オーバーロード:
void f(T&&); // Overload #1 (rvalue reference) void f(T&); // Overload #2 (lvalue reference)
別の関数内function:
void g(T&& t) { f(t); // Calls Overload #2 (lvalue reference) }
驚くべき結果は、引数 t が右辺値参照であるにもかかわらず、オーバーロード #2 (左辺値参照) が呼び出されるということです。
理由: 右辺値参照は特殊な型
の左辺値参照は、名前があり、左辺値として使用できるため、左辺値とみなされます。ほとんどの目的に使用できる左辺値。ただし、その型である右辺値参照は、その制限されたバインディング機能を指定します。
右辺値参照オーバーロードを呼び出す方法
右辺値参照オーバーロードを呼び出すには、引数は次のようにする必要があります。 static_cast を使用して明示的に右辺値参照に変換される演算子:
f(static_cast<T&&>(t));
右辺値参照を管理するその他のルール
以上がC 関数のオーバーロードで右辺値参照が左辺値のように動作することがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。