ホームページ >バックエンド開発 >C++ >右辺値参照を渡すときに `f(T&&)` が呼び出されないのはなぜですか?

右辺値参照を渡すときに `f(T&&)` が呼び出されないのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-08 13:17:11154ブラウズ

Why Doesn't `f(T&&)` Get Called When Passing an Rvalue Reference to It?

変数が右辺値参照ではない理由

関数 f:

void f(T&&&); // #1
void f(T&);  // #2

In の 2 つのオーバーロードを考えます。別の関数 g:

void g(T&& t) 
{ 
  f(t);  // calls #2
}

なぜパラメーター t が右辺値であるにもかかわらず、オーバーロード f(T&) は呼び出されますか?

右辺値参照の性質

右辺値参照は、右辺値にのみバインドできる変数です(名前のないオブジェクト)。 T&&t には名前があり、左辺値になります。

型と値の区別

T&& は型右辺値参照です。右辺値参照は右辺値にのみバインドできますが、それ以外の場合は参照型の左辺値です。

特殊なケース

  • static_cast(t):これにより明示的に右辺値参照が作成され、次の呼び出しが可能になります。 f(T&&).

右辺値参照を管理するルール

  • 関数から名前付きの値を返すとき、または値に名前がない場合、暗黙的な移動が発生します。
  • 右辺値参照または const& はバインドのみ可能rvalues.
  • 参照の有効期間の拡張は、コンストラクター外の参照にバインドされた一時ファイルに適用されます。
  • 特定のコンテキストでは、T&& が X& または X const& の場合、T&& は X& または X const& に折りたたまれます。
  • T&& は、型推定の「転送参照」として機能できます。

以上が右辺値参照を渡すときに `f(T&&)` が呼び出されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。