ホームページ バックエンド開発 C++ 右辺値参照変数が右辺値参照関数の署名と一致しないのはなぜですか?

右辺値参照変数が右辺値参照関数の署名と一致しないのはなぜですか?

Dec 10, 2024 pm 10:46 PM

Why Doesn't an Rvalue Reference Variable Match an Rvalue Reference Function Signature?

なぜ右辺値参照変数は右辺値ではないのでしょうか?

2 つのオーバーロード関数 f:

1

2

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

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

ログイン後にコピー

内について考えてみましょう関数g:

1

2

3

void g(T&& t) {

  f(t);  // Calls Overload #2

}

ログイン後にコピー

驚くべきことに、最初のオーバーロードに右辺値参照署名 (T&&) があるにもかかわらず、t が左辺値とみなされるため、オーバーロード #2 が呼び出されます。

右辺値参照署名が右辺値を渡す呼び出しと一致しません?

C ルールについて右辺値

右辺値は通常、名前のない変数であり、まもなく名前が失われます。 T&& t は識別子 t を持っているため、左辺値です。右辺値は有効期間が短く、後で参照することは不可能であるため、これは理にかなっています。

ただし、T&&amp は型右辺値参照です。静的キャストを伴わない右辺値のみにバインドできますが、それでも型右辺値参照の左辺値です。その右辺値参照の性質は、その初期化と decltype の使用中にのみ問題になります。それ以外の場合は、参照型の左辺値として機能します。

静的キャストおよび参照拡張

std::move(t) は、静的キャストを実行して右辺値参照を返します。上に。これにより、一時値がコンストラクターの外部の参照にバインドされている場合、参照の有効期間を延長できます。

C 標準では、これらのシナリオを処理するための明示的なルールが定義されています。右辺値参照と const 参照は右辺値にバインドできます。暗黙的な移動は、関数から名前付きの値を返す場合、値に名前がない場合、または関数が明示的に右辺値参照を返す場合に発生します。

さらに、T&&amp は必ずしも右辺値参照であるとは限りません。 T が X& の場合または X const&、参照の折りたたみは T&& を変換します。 X& へまたは X const&。最後に、T&&amp は、引数の型に応じて、型推定の「転送参照」として機能します。

以上が右辺値参照変数が右辺値参照関数の署名と一致しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか? C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか? Mar 03, 2025 pm 05:52 PM

C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか?

GULC:Cライブラリはゼロから構築されています GULC:Cライブラリはゼロから構築されています Mar 03, 2025 pm 05:46 PM

GULC:Cライブラリはゼロから構築されています

c言語関数形式文字ケース変換手順 c言語関数形式文字ケース変換手順 Mar 03, 2025 pm 05:53 PM

c言語関数形式文字ケース変換手順

C言語関数の定義と呼び出しルールは何ですか、そして C言語関数の定義と呼び出しルールは何ですか、そして Mar 03, 2025 pm 05:53 PM

C言語関数の定義と呼び出しルールは何ですか、そして

明確な使用法とフレーズ共有 明確な使用法とフレーズ共有 Mar 03, 2025 pm 05:51 PM

明確な使用法とフレーズ共有

メモリに保存されているC言語関数の返品値はどこにありますか? メモリに保存されているC言語関数の返品値はどこにありますか? Mar 03, 2025 pm 05:51 PM

メモリに保存されているC言語関数の返品値はどこにありますか?

C標準テンプレートライブラリ(STL)はどのように機能しますか? C標準テンプレートライブラリ(STL)はどのように機能しますか? Mar 12, 2025 pm 04:50 PM

C標準テンプレートライブラリ(STL)はどのように機能しますか?

STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか? STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか? Mar 12, 2025 pm 04:52 PM

STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか?

See all articles