std::is_const
De cppreference.com
Definido en el archivo de encabezado <type_traits>
|
||
template< class T > struct is_const; |
(desde C++11) | |
std::is_const
es un UnaryTypeTrait.
Si T
es un tipo calificado constante (es decir, const, o const volatile), proporciona la constante miembro value
igual a true. Para cualquier otro tipo, value
es false.
El comportamiento de un programa que añade especializaciones para is_const
o is_const_v
(desde C++17) no está definido.
Contenido |
[editar] Parámetros de plantilla
T | - | Un tipo a comprobar. |
[editar] Plantilla de variable auxiliar
template< class T > inline constexpr bool is_const_v = is_const<T>::value; |
(desde C++17) | |
Heredado de std::integral_constant
Constantes miembro
value [estático] |
true si T es un tipo calificado constante, de lo contrario false. (constante miembro pública estática) |
Funciones miembro
operator bool |
Convierte el objeto a bool, devuelve value . (función miembro pública) |
operator() (C++14) |
Devuelve value . (función miembro pública) |
Tipos miembro
Tipo | Definición |
value_type
|
bool
|
type
|
std::integral_constant<bool, value> |
[editar] Notas
Si T es un tipo referencia, entonces is_const<T>::value es siempre false. La manera apropiada de comprobar un tipo que es potencialmente una referencia para saber si es constante es eliminar la referencia: is_const<typename remove_reference<T>::type>.
[editar] Posible implementación
template<class T> struct is_const : std::false_type {}; template<class T> struct is_const<const T> : std::true_type {}; |
[editar] Ejemplo
Ejecuta este código
#include <iostream> #include <type_traits> int main() { std::cout << std::boolalpha << std::is_const_v<int> << '\n' // falso << std::is_const_v<const int> << '\n' // verdadero << std::is_const_v<const int*> /*falso*/ << " porque el puntero mismo puede cambiarse pero no el int al que apunta\n" << std::is_const_v<int* const> /*verdadero*/ << " porque el puntero mismo no puede cambiarse pero el int al que apunta si\n" << std::is_const_v<const int&> << '\n' // falso << std::is_const_v<std::remove_reference_t<const int&>> << '\n' // verdadero ; }
Salida:
false true false porque el puntero mismo puede cambiarse pero no el int al que apunta true porque el puntero mismo no puede cambiarse pero el int al que apunta si false true
[editar] Véase también
(C++11) |
Comprueba si un tipo está calificado con el calificador volatile (plantilla de clase) |
(C++17) |
Obtiene una referencia a const para su argumento. (plantilla de función) |