std:: remove_cv, std:: remove_const, std:: remove_volatile
From cppreference.net
C++
Metaprogramming library
| Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++14)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definido en el encabezado
<type_traits>
|
||
|
template
<
class
T
>
struct remove_cv ; |
(1) | (desde C++11) |
|
template
<
class
T
>
struct remove_const ; |
(2) | (desde C++11) |
|
template
<
class
T
>
struct remove_volatile ; |
(3) | (desde C++11) |
Proporciona el typedef miembro
type
que es el mismo que
T
, excepto que sus calificadores cv superiores son eliminados.
1)
Elimina el
const
más externo, o el
volatile
más externo, o ambos, si están presentes.
2)
Elimina el más superior
const
.
3)
Elimina el más superior
volatile
.
Si el programa añade especializaciones para cualquiera de las plantillas descritas en esta página, el comportamiento no está definido.
Contenidos |
Tipos de miembros
| Nombre | Definición |
type
|
el tipo
T
sin calificador cv
|
Tipos auxiliares
|
template
<
class
T
>
using remove_cv_t = typename remove_cv < T > :: type ; |
(desde C++14) | |
|
template
<
class
T
>
using remove_const_t = typename remove_const < T > :: type ; |
(desde C++14) | |
|
template
<
class
T
>
using remove_volatile_t = typename remove_volatile < T > :: type ; |
(desde C++14) | |
Implementación posible
template<class T> struct remove_cv { typedef T type; }; template<class T> struct remove_cv<const T> { typedef T type; }; template<class T> struct remove_cv<volatile T> { typedef T type; }; template<class T> struct remove_cv<const volatile T> { typedef T type; }; template<class T> struct remove_const { typedef T type; }; template<class T> struct remove_const<const T> { typedef T type; }; template<class T> struct remove_volatile { typedef T type; }; template<class T> struct remove_volatile<volatile T> { typedef T type; }; |
` y `` no se ha traducido según las instrucciones, ya que contiene código C++ específico que debe conservarse intacto. El texto circundante (como esta nota) está traducido al español manteniendo el formato HTML original.
Ejemplo
Eliminar const/volatile de const volatile int * no modifica el tipo, porque el puntero en sí no es ni const ni volatile.
Ejecutar este código
#include <type_traits> template<typename U, typename V> constexpr bool same = std::is_same_v<U, V>; static_assert ( same<std::remove_cv_t<int>, int> && same<std::remove_cv_t<const int>, int> && same<std::remove_cv_t<volatile int>, int> && same<std::remove_cv_t<const volatile int>, int> && // remove_cv solo funciona en tipos, no en punteros not same<std::remove_cv_t<const volatile int*>, int*> && same<std::remove_cv_t<const volatile int*>, const volatile int*> && same<std::remove_cv_t<const int* volatile>, const int*> && same<std::remove_cv_t<int* const volatile>, int*> ); int main() {}
Véase también
|
(C++11)
|
comprueba si un tipo está calificado como const
(plantilla de clase) |
|
(C++11)
|
comprueba si un tipo está calificado como volatile
(plantilla de clase) |
|
(C++11)
(C++11)
(C++11)
|
añade
const
y/o
volatile
especificadores al tipo dado
(plantilla de clase) |
|
(C++20)
|
combina
std::remove_cv
y
std::remove_reference
(plantilla de clase) |