Compartilhar via


Classe add_rvalue_reference

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