ユニバーサル参照と転送参照: 包括的な説明
C では、プログラマは関数にデータを渡すために参照を使用することがよくあります。関数パラメータを右辺値参照として定義する場合 (たとえば、 void f(int && i))、関数の引数は右辺値参照にバインドされます。逆に、T && として宣言されたテンプレート関数パラメーターは、 t は右辺値参照または左辺値参照のいずれかにバインドできます。
これら 2 つのパラメーター タイプは議論を引き起こし、後者を「ユニバーサル参照」と呼ぶ人もいれば、「転送参照」と呼ぶ人もいます。
ユニバーサル参照と転送参照
「ユニバーサル参照」という用語は、元々はScott Meyers が作成した造語で、cv 修飾されていないテンプレート パラメーターへの右辺値参照が、それ自体を値または左辺値参照として推定する機能を記述します。ただし、C 17 では、「転送参照」という新しい用語が導入されました。
C 標準によれば、「転送参照」は、CV 修飾されていないテンプレート パラメーターへの右辺値参照として定義されています。関数の引数が左辺値の場合、型「A への左辺値参照」が型推論に使用されます。
したがって、ユニバーサル参照と転送参照は同義であり、C 標準で現在好まれている用語は「転送」です。 「
参照の転送とstd::forward()
関数 std::forward() は、その引数を別の関数または関数オブジェクトに転送します。これは、特に引数がユニバーサル参照である場合に、引数の型を保持するためによく使用されます。ただし、 std::forward() の使用は、パラメータが転送参照とみなされるための要件ではありません。
結論
転送参照は、柔軟な処理方法を提供します。関数パラメータ。これらは右辺値または左辺値参照にバインドできるため、コード開発に利便性と柔軟性をもたらします。転送参照とユニバーサル参照の区別を理解することは、効率的で保守可能な C コードを作成するために不可欠です。
以上がC におけるユニバーサル参照と転送参照の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。