Udostępnij za pośrednictwem


add_rvalue_reference — klasa

Tworzy typ odwołania rvalue parametru szablonu, jeśli jest to obiekt lub typ funkcji. W przeciwnym razie ze względu na semantyka zwijania odwołań typ jest taki sam jak parametr szablonu.

Składnia

template <class T>
struct add_rvalue_reference;

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

Parametry

T
Typ do modyfikacji.

Uwagi

Klasa add_rvalue_reference ma składową o nazwie type, która jest aliasem typu odwołania rvalue do parametru szablonu T. Semantyka zwijania odwołań oznacza, że w przypadku typów innych niż object i innych niż funkcje T jest T. T&& Na przykład gdy T jest typem odwołania lvalue, add_rvalue_reference<T>::type jest typem odwołania lvalue, a nie odwołaniem do wartości rvalue.

Dla wygody <type_traits> definiuje szablon pomocnika , add_rvalue_reference_tktóry aliasuje type element członkowski .add_rvalue_reference

Przykład

W tym przykładzie kodu użyto static_assert, aby pokazać, jak typy odwołań rvalue są tworzone przy użyciu poleceń add_rvalue_reference i add_rvalue_reference_t, oraz jak wynik add_rvalue_reference typu odwołania lvalue nie jest odwołaniem rvalue, ale zwija się do typu odwołania 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.
*/

Wymagania

Nagłówek: <type_traits>

Przestrzeń nazw: std

Zobacz też

<type_traits>
add_lvalue_reference, klasa
is_rvalue_reference, klasa