Compartilhar via


avançar

Converterá condicionalmente seu argumento em uma referência rvalue se o argumento for um rvalue ou referência rvalue. Isso restaura o rvalue-ness de um argumento para a função de encaminhamento como suporte ao encaminhamento perfeito.

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

Parâmetros

Parâmetro

Descrição

Type

O tipo do valor passado em Arg, que pode ser diferente do tipo de Arg. Geralmente determinado por um argumento de modelo da função de encaminhamento.

Arg

O argumento a ser convertido.

Valor de retorno

Retornará uma referência rvalue para Arg se o valor passado em Arg era originalmente um rvalue ou uma referência a um rvalue; caso contrário, retornará Arg sem modificação do seu tipo.

Comentários

Você deve especificar um argumento de modelo explícito para chamar forward.

forward não encaminha seu argumento. Em vez disso, ao converter condicionalmente seu argumento em uma referência rvalue se ele originalmente era um rvalue ou referência rvalue, forward permite que o compilador execute a resolução de sobrecarga com conhecimento do tipo original do argumento encaminhado. O tipo aparente de um argumento para uma função de encaminhamento pode ser diferente do tipo original – por exemplo, quando um rvalue é usado como um argumento para uma função e é associado a um nome de parâmetro; ter um nome o torna um lvalue, independentemente de o valor realmente existir como um rvalue – forward restaura o rvalue-ness do argumento.

Restaurar o rvalue-ness do valor original de um argumento para executar a resolução de sobrecarga é conhecido como encaminhamento perfeito. O encaminhamento perfeito permite que uma função de modelo aceite um argumento do tipo de referência e restaure seu rvalue-ness quando for necessário para resolução de sobrecarga correta. Usando o encaminhamento perfeito, você pode preservar as semânticas de movimento para rvalues, além de evitar ter que fornecer sobrecargas para funções que variam apenas pelo tipo de referência de seus argumentos.

Requisitos

Cabeçalho: <utility>

Namespace: std

Consulte também

Referência

<utility>

Lvalues e Rvalues