ユニバーサル参照と転送参照をわかりやすく理解する
C では、ユニバーサル参照と転送参照の区別が議論の対象となってきました。この混乱を明確にするために、それらの関係と定義を調べます。
ユニバーサル参照の本質
歴史的に、ユニバーサル参照は、右辺値参照を受け入れることができるテンプレート パラメータを記述するために導入されました。 cv 修飾されていない型に。これにより、テンプレートは、渡された引数に基づいて値または左辺値参照を推定できるようになりました。
転送参照の定義
「転送参照」という用語は、 C 標準 (N4164) では、C 11 でこの概念を表す特定の用語が欠落していることに対処しています。転送参照は正式に右辺値参照として定義されています。 cv 修飾されていないテンプレート パラメータに変換します。引数が左辺値の場合、型推論中に「A への左辺値参照」が型 "A" に置き換えられます。
普遍性と転送: 同じコイン、異なる側
「ユニバーサル参照」と「転送参照」という用語は同じ概念を表します。これらはどちらも、値または左辺値参照のいずれかの推論を可能にする cv 非修飾テンプレート パラメーターへの右辺値参照を参照します。現在の C 標準用語は「転送参照」であり、より正確で簡潔な記述子と考えられています。
std::forward の無関係
次のことが重要です。関数本体内での std::forward の使用は、参照の転送の概念とは無関係であることに注意してください。転送参照は、cv-unqualified パラメータへの右辺値参照に基づくテンプレート タイプの推論のみを指します。これらの動作は、その後 std::forward が呼び出されるかどうかには依存しません。
以上がC におけるユニバーサル参照と転送参照の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。