ホームページ >バックエンド開発 >C++ >C におけるユニバーサル参照と転送参照の違いは何ですか?

C におけるユニバーサル参照と転送参照の違いは何ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-17 09:29:031063ブラウズ

What's the Difference Between Universal References and Forwarding References in C  ?

ユニバーサル参照と転送参照: 包括的な説明

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 サイトの他の関連記事を参照してください。

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