Condividi tramite


Classe add_rvalue_reference

Crea un tipo di riferimento rvalue del parametro del modello, se si tratta di un tipo di oggetto o funzione. In caso contrario, a causa della semantica di compressione dei riferimenti, il tipo è lo stesso del parametro di modello.

Sintassi

template <class T>
struct add_rvalue_reference;

template <class T>
using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;

Parametri

T
Tipo da modificare.

Osservazioni:

La add_rvalue_reference classe ha un membro denominato type, che è un alias per il tipo di riferimento rvalue al parametro modello T. La semantica della compressione dei riferimenti implica che, per i tipi non oggetto e non funzione T, T&& è un T. Ad esempio, quando T è un tipo riferimento lvalue, add_rvalue_reference<T>::type è il tipo riferimento lvalue, non un riferimento rvalue.

Per praticità, <type_traits definisce un modello helper, add_rvalue_reference_t, che aliasa il type membro di add_rvalue_reference> .

Esempio

Questo esempio di codice usa static_assert per mostrare come i tipi di riferimento rvalue vengono creati usando add_rvalue_reference e add_rvalue_reference_t e come il risultato di add_rvalue_reference in un tipo di riferimento lvalue non è un riferimento rvalue, ma viene compresso nel tipo di riferimento 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.
*/

Requisiti

Intestazione: <type_traits>

Spazio dei nomi: std

Vedi anche

<type_traits>
Classe add_lvalue_reference
Classe is_rvalue_reference