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