forward
Esegue il cast in modo condizionale del relativo argomento a un riferimento rvalue se l'argomento è un rvalue o un riferimento rvalue. In questo modo viene ripristinata la caratteristica rvalue di una funzione di inoltro in supporto dell'inoltro perfetto.
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
Parametri
Parametro |
Descrizione |
---|---|
Type |
Tipo di valore passato in Arg, che potrebbe essere diverso dal tipo di Arg, in genere determinato da un argomento di modello della funzione di inoltro. |
Arg |
Argomento di cui eseguire il cast. |
Valore restituito
Restituisce un riferimento rvalue a Arg se il valore passato in Arg era in origine un rvalue o un riferimento a un rvalue; in caso contrario, restituisce Arg senza modificarne il tipo.
Note
È necessario specificare un argomento di modello esplicito per chiamare forward.
forward non inoltra il relativo argomento. Al contrario, l'esecuzione del cast in modo condizionale del relativo argomento a un riferimento rvalue se in origine era un rvalue o un riferimento rvalue, forward consente al compilatore di eseguire la risoluzione dell'overload e di conoscere il tipo originale dell'argomento inoltrato. Il tipo apparente di un argomento di una funzione di inoltro potrebbe essere diverso rispetto al relativo tipo originale, ad esempio quando viene utilizzato un rvalue come argomento di una funzione e tale rvalue viene associato a un nome di parametro, il fatto di possedere un nome lo rende un lvalue, indipendentemente dal fatto che il valore sia effettivamente presente come rvalue. forward consente di ripristinare la caratteristica rvalue dell'argomento.
Il ripristino della caratteristica rvalue del valore originale di un argomento per eseguire la risoluzione dell'overload è noto come inoltro perfetto. L'inoltro perfetto consente a una funzione di modello di accettare un argomento di un tipo di riferimento e di ripristinare la caratteristica rvalue quando è necessario per una risoluzione corretta dell'overload. Utilizzando l'inoltro perfetto è possibile mantenere la semantica di spostamento relativa agli rvalue ed evitare di fornire gli overload per le funzioni che variano solo in base al tipo di riferimento dei relativi argomenti.
Requisiti
Intestazione: <utility>
Spazio dei nomi: std