◐ Shell
clean mode source ↗

std::add_cv, std::add_const, std::add_volatile - cppreference.com

De cppreference.com

Definido en el archivo de encabezado <type_traits>

template< class T > struct add_cv;

(1) (desde C++11)

template< class T > struct add_const;

(2) (desde C++11)

template< class T > struct add_volatile;

(3) (desde C++11)

Proporciona la definición de tipo (typedef) miembro type que es igual a T, excepto que tiene añadido un calificador-cv (a menos que T sea una función, una referencia, o ya tenga este calificador-cv).

1) Añade tanto const como volatile.

2) Añade const

3) Añade volatile.

El comportamiento de un programa que añade especializaciones para cualquiera de las plantillas definidas en esta página no está definido.

Tipos miembro

Nombre Definición
type El tipo T con el calificador-cv.

Tipos auxiliares

template< class T > using add_cv_t = typename add_cv<T>::type;

(desde C++14)

template< class T > using add_const_t = typename add_const<T>::type;

(desde C++14)

template< class T > using add_volatile_t = typename add_volatile<T>::type;

(desde C++14)

Posible implementación

template<class T> struct add_cv { typedef const volatile T type; };

template<class T> struct add_const { typedef const T type; };

template<class T> struct add_volatile { typedef volatile T type; };

Notas

Estos rasgos de transformación pueden usarse para establecer contextos no deducidos en la deducción de argumentos de plantilla:

template<class T>
void f(const T&, const T&);

template<class T>
void g(const T&, std::add_const_t<T>&);

f(4.2, 0); // ERROR, tipos conflictivos deducidos para 'T'
g(4.2, 0); // de acuerdo, llama a g<double>

Ejemplo

#include <iostream>
#include <type_traits>

struct foo
{
    void m() { std::cout << "No-cv\n"; }
    void m() const { std::cout << "Const\n"; }
    void m() volatile { std::cout << "Volatile\n"; }
    void m() const volatile { std::cout << "Const-volatil\n"; }
};

int main()
{
    foo{}.m();
    std::add_const<foo>::type{}.m();
    std::add_volatile<foo>::type{}.m();
    std::add_cv<foo>::type{}.m();
}

Salida:

No-cv
Const
Volatil
Const-volatil

Véase también