Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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_tdie 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