add_rvalue_reference-Klasse
Erstellt einen rvalue-Verweistyp des Vorlagenparameters, wenn es sich dabei um einen Objekt- oder Funktionstyp handelt. Ansonsten ist der Typ aufgrund der Semantik der Verweisreduzierung der Gleiche wie der Vorlagenparameter.
Syntax
template <class T>
struct add_rvalue_reference;
template <class T>
using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;
Parameter
T
Der zu ändernde Typ.
Hinweise
Die add_rvalue_reference
Klasse verfügt über ein Element namens type
, bei dem es sich um einen Alias für den Typ eines Rvalue-Verweises auf den Vorlagenparameter T handelt. Die Semantik der Verweisverknappung bedeutet, dass es sich bei nicht-Objekt- und Nicht-Funktionstypen T T&&
um einen T handelt. Wenn Z. B. T ein lvalue-Bezugstyp ist, add_rvalue_reference<T>::type
ist der lvalue-Bezugstyp, kein Rvalue-Verweis.
Aus Gründen der Einfachheit <definiert type_traits> eine Hilfsvorlage, add_rvalue_reference_t
die das type
Element von add_rvalue_reference
.
Beispiel
Dieses Codebeispiel verwendet static_assert, um anzuzeigen, wie rvalue-Verweistypen mithilfe von add_rvalue_reference
und add_rvalue_reference_t
erstellt werden, und wie das Ergebnis von add_rvalue_reference
eines rvalue-Verweistyps kein rvalue-Verweis ist, sondern auf einen lvalue-Typ reduziert wird.
// 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.
*/
Anforderungen
Kopfzeile: <type_traits>
Namespace: std
Siehe auch
<type_traits>
add_lvalue_reference-Klasse
is_rvalue_reference-Klasse