次の方法で共有


forward

引数が右辺値または右辺値参照である場合に、条件付きで引数を右辺値参照にキャストします。 これによって、完全転送をサポートする転送関数に対する引数の右辺値性が復元されます。

template<class Type>    // accepts lvalues
Type&& forward(typename remove_reference<Type>::type& Arg)

template<class Type>    // accepts everything else
Type&& forward(typename remove_reference<Type>::type&& Arg) noexcept

パラメーター

パラメーター

説明

Type

Arg で渡される値の型は、Arg の型とは異なる場合があります。 通常、転送関数のテンプレート引数によって決まります。

Arg

キャストする引数。

戻り値

Arg に渡された値が最初は右辺値または右辺値参照であった場合、Arg への右辺値参照を返します。それ以外の場合は、型を変更しないで Arg を返します。

解説

forward を呼び出すために明示的なテンプレート引数を指定する必要があります。

forward は引数を転送しません。 代わりに、引数が元から右辺値または右辺値参照であった場合、条件付きで引数を右辺値参照にキャストすることにより、forward は、転送された引数の元の型の情報を使って、コンパイラでオーバーロードを解決できるようにします。 転送関数の引数の明確な型は元の型とは異なる場合があります。たとえば、右辺値が関数の引数として使用され、パラメーター名にバインドされている場合、名前を付けると、その値が実際に右辺値として存在するかどうかに関係なく左辺値になります。forward は引数の右辺値性を復元します。

オーバーロードの解決を実行するために引数の元の値の右辺値性を復元することは、完全転送と呼ばれます。 完全転送によって、テンプレート関数はいずれかの参照型の引数を受け取り、正しいオーバーロードの解決に必要な場合に引数の右辺値性を復元できます。 完全転送を使用することによって、右辺値の移動セマンティクスを保持することができ、引数の参照型のみが異なる関数にオーバーロードを用意する必要がなくなります。

必要条件

ヘッダー: <utility>

名前空間: std

参照

関連項目

<utility>

左辺値と右辺値