std::is_const
De cppreference.com
<tbody>
</tbody>
| 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.
Parámetros de plantilla
| T | - | Un tipo a comprobar. |
Plantilla de variable auxiliar
<tbody> </tbody> 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>
|
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>.
Posible implementación
template<class T> struct is_const : std::false_type {};
template<class T> struct is_const<const T> : std::true_type {};
|
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
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) |