Espacios de nombres
Variantes
Acciones

std::add_cv, std::add_const, std::add_volatile

De cppreference.com
< cpp‎ | types
 
 
Biblioteca de servicios
 
Apoyo de tipos
Tipos básicos
Tipos fundamentales
Tipos enteros de anchura fija (C++11)
Límites numéricos
Interfaz de C de límites numéricos
Información de tipo
en tiempo de ejecución
Rasgos de tipos
Categorías de tipos
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Propiedades de tipos
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(hasta C++20)
(C++11)(en desuso en C++20)
(C++11)
Constantes de rasgos de tipos
Metafunciones
(C++17)
Contexto de evaluación constante
Operaciones soportadas
Relaciones y consultas de propiedades
Modificaciones de tipos
add_cvadd_constadd_volatile
(C++11)(C++11)(C++11)
Transformaciones de tipos
(C++11)
(C++11)
(C++17)
(C++11)(hasta C++20)(C++17)
 
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

#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) [editar]
Comprueba si un tipo está calificado con el calificador volatile
(plantilla de clase) [editar]
Elimina los especificadores const y/o volatile del tipo dado.
(plantilla de clase) [editar]
(C++17)
Obtiene una referencia a const para su argumento.
(plantilla de función) [editar]