ホームページ > バックエンド開発 > C++ > 「T&&」が常に真の右辺値参照のように動作しないのはなぜですか?

「T&&」が常に真の右辺値参照のように動作しないのはなぜですか?

Linda Hamilton
リリース: 2024-11-30 06:21:15
オリジナル
395 人が閲覧しました

Why Doesn't `T&&` Always Behave Like a True Rvalue Reference?

T&& が右辺値参照のように動作しないのはなぜですか?

void f(T&&) や void f(T& などの関数オーバーロードを扱う場合)、その逆は当てはまらないにもかかわらず、T&& を渡すときに f(T&) が呼び出されることは驚くべきことです。これは、C の右辺値参照の動作によるものです。

直観に反して、T&& は単なる右辺値参照ではありません。これは右辺値参照です。つまり、右辺値にバインドすることしかできませんが、それ以外の場合は右辺値参照型の左辺値のように動作します。このバインド動作により、名前のないオブジェクトや名前を失いそうなオブジェクトが自動的に右辺値として扱われるようになります。

ただし、T&& には名前 (つまり t) があるため、左辺値とみなされ、 f( T&) 過負荷です。 f(static_cast

要約すると、この動作を管理する C のルールは次のとおりです。

  • 暗黙的な移動は、関数から名前付きの値を返すとき、値に名前がないとき、または関数が明示的に返すときに発生します。右辺値参照。
  • 右辺値にバインドできるのは、右辺値参照と const& のみです。
  • 一時値の参照存続期間の延長は、コンストラクターの外部の参照に直接バインドされた場合に発生し、右辺値参照と const& に適用されます。
  • T&& は必ずしも右辺値参照であるとは限りません。 T の型に基づいて、X&、X const&、または X const&& に折りたたまれる可能性があります。
  • T&& は、型推論コンテキストで「転送参照」として機能し、引数の型に基づいて T を推論できます。

以上が「T&&」が常に真の右辺値参照のように動作しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート