Partager via


forward

Convertit de manière conditionnelle son argument en une référence rvalue, si l'argument est une rvalue ou une référence rvalue. Cette opération restaure la nature rvalue d'un argument pour le transfert parfait.

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

Paramètres

Paramètre

Description

Type

Type de la valeur passée dans Arg, qui peut être différent du type de Arg. Généralement déterminé par un argument template de la fonction de transfert.

Arg

Argument à convertir (transtypage).

Valeur de retour

Retourne une référence rvalue à Arg si la valeur passée dans Arg était à l'origine une rvalue ou une référence rvalue ; sinon, retourne Arg sans modifier son type.

Notes

Vous devez spécifier un argument template explicite pour appeler forward.

forward ne transfère pas son argument. En revanche, en convertissant son argument de manière conditionnelle en une référence rvalue, s'il s'agissait à l'origine d'une rvalue ou d'une référence rvalue, forward permet au compilateur d'effectuer une résolution de surcharge en connaissant le type d'origine de l'argument transféré. Le type apparent de l'argument d'une fonction de transfert peut être différent de son type d'origine, par exemple, lorsqu'une rvalue est utilisée en tant qu'argument d'une fonction et qu'elle est liée à un nom de paramètre. Le fait d'avoir un nom en fait une lvalue, même si la valeur existe en tant que rvalue. forward restaure la nature rvalue de l'argument.

La restauration de la nature rvalue de la valeur d'origine d'un argument dans le but d'effectuer une résolution de surcharge se nomme transfert parfait. Le transfert parfait permet à une fonction de modèle d'accepter un argument de n'importe quel type référence et de restaurer sa nature rvalue si nécessaire, pour une résolution de surcharge appropriée. Le transfert parfait permet de préserver la sémantique de déplacement des rvalue et évite d'avoir à fournir des surcharges pour les fonctions qui varient uniquement par le type référence de leurs arguments.

Configuration requise

En-tête : <utility>

Espace de noms : std

Voir aussi

Référence

<utility>

Lvalues et Rvalues