Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Criará um tipo de referência de rvalue do parâmetro de modelo, se for um tipo de objeto ou de função. Caso contrário, devido à semântica de recolhimento de referência, o tipo será igual ao do parâmetro de modelo.
Sintaxe
template <class T>
struct add_rvalue_reference;
template <class T>
using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;
Parâmetros
T
O tipo a ser modificado.
Comentários
A classe add_rvalue_reference tem um membro chamado type, que é um alias para o tipo de uma referência rvalue para o parâmetro de modelo T. A semântica do recolhimento de referência implica que, para os tipos não objeto e não-função T, T&& é um T. Por exemplo, quando T é um tipo de referência lvalue, add_rvalue_reference<T>::type é o tipo de referência lvalue, não uma referência rvalue.
Para facilitar, <type_traits> define o modelo auxiliar add_rvalue_reference_t, que cria um alias para o membro type de add_rvalue_reference.
Exemplo
Este exemplo de código usa static_assert para mostrar como os tipos de referência de rvalue são criados usando add_rvalue_reference e add_rvalue_reference_t, e como o resultado de add_rvalue_reference em um tipo de referência de lvalue não é uma referência de rvalue, mas recolhe ao tipo de referência de lvalue.
// ex_add_rvalue_reference.cpp
// Build by using: cl /EHsc /W4 ex_add_rvalue_reference.cpp
#include <type_traits>
#include <iostream>
#include <string>
using namespace std;
int main()
{
static_assert(is_same<add_rvalue_reference<string>::type, string&&>::value,
"Expected add_rvalue_reference_t<string> to be string&&");
static_assert(is_same<add_rvalue_reference_t<string*>, string*&&>::value,
"Expected add_rvalue_reference_t<string*> to be string*&&");
static_assert(is_same<add_rvalue_reference<string&>::type, string&>::value,
"Expected add_rvalue_reference_t<string&> to be string&");
static_assert(is_same<add_rvalue_reference_t<string&&>, string&&>::value,
"Expected add_rvalue_reference_t<string&&> to be string&&");
cout << "All static_assert tests of add_rvalue_reference passed." << endl;
return 0;
}
/*Output:
All static_assert tests of add_rvalue_reference passed.
*/
Requisitos
Cabeçalho: <type_traits>
Namespace: std
Confira também
<type_traits>
Classe add_lvalue_reference
Classe is_rvalue_reference