web-dev-qa-db-ja.com

完璧な転送-それは何ですか?

可能性のある複製:
forwardを使用する利点

完璧な転送とは何かを誰かに説明してもらえますか?

49
smallB

http://www.justsoftwaresolutions.co.uk/cplusplus/rvalue_references_and_perfect_forwarding.html

なぜこれが便利なのですか?つまり、関数テンプレートは、std :: forwardを使用して関数引数の左辺値/右辺値の性質を保持しながら、引数を別の関数に渡すことができることを意味します。これは「完全転送」と呼ばれ、過剰なコピーを回避し、テンプレート作成者が左辺値と右辺値の参照に対して複数のオーバーロードを記述する必要がなくなります。

40
J. Steen

引用 セッション発表:パーフェクトフォワーディングの冒険

完全転送は、右辺値参照の上に構築される重要なC++ 0xテクニックです。移動のソースと移動先が関数呼び出しの介在によって分離されている場合でも、移動セマンティクスを自動的に適用できます。一般的な例には、受け取った引数を初期化または設定しているクラスのデータメンバーに転送するコンストラクターとセッター関数、および引数をオブジェクトのクラスコンストラクターに「完全転送」するmake_sharedなどの標準ライブラリ関数が含まれます。作成されるshared_ptrは指すことです。

8
Gregory Pakosz