Compartir vía


add_rvalue_reference (Clase)

Si es un tipo de objeto o función, crea un tipo de referencia a un valor R del parámetro de plantilla. De lo contrario, debido a la semántica de contracción de referencias, el tipo es el mismo que el parámetro de plantilla.

Sintaxis

template <class T>
struct add_rvalue_reference;

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

Parámetros

T
Tipo que se va a modificar.

Comentarios

La clase add_rvalue_reference tiene un miembro denominado type, que es un alias para el tipo de una referencia rvalue al parámetro de plantilla T. La semántica de contracción de referencias implica que, en los tipos T que no son de objeto ni de función, T&& es T. Por ejemplo, cuando T es un tipo de referencia lvalue, add_rvalue_reference<T>::type es el tipo de referencia lvalue, no una referencia rvalue.

Por comodidad, <type_traits> define una plantilla del asistente, add_rvalue_reference_t, que crea el alias del miembro type de add_rvalue_reference.

Ejemplo

En este ejemplo de código se usa static_assert para mostrar cómo se crean tipos de referencia a un valor R mediante add_rvalue_reference y add_rvalue_reference_t y cómo el resultado de add_rvalue_reference en un tipo de referencia a un valor R no es una referencia a un valor R, sino que se contrae en el tipo de referencia a un valor L.

// 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.
*/

Requisitos

Encabezado: <type_traits>

Espacio de nombres: std

Consulte también

<type_traits>
Clase add_lvalue_reference
is_rvalue_reference (Clase)