Share via


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_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