std::add_cv, std::add_const, std::add_volatile
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.
Contenido |
[editar] Tipos miembro
Nombre | Definición |
type
|
El tipo T con el calificador-cv.
|
[editar] 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) | |
[editar] 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; }; |
[editar] 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>
[editar] Ejemplo
Ejecuta este código
#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
[editar] Véase también
(C++11) |
Comprueba si un tipo está calificado con el calificador const (plantilla de clase) |
(C++11) |
Comprueba si un tipo está calificado con el calificador volatile (plantilla de clase) |
(C++11)(C++11)(C++11) |
Elimina los especificadores const y/o volatile del tipo dado. (plantilla de clase) |
(C++17) |
Obtiene una referencia a const para su argumento. (plantilla de función) |