std::is_same
De cppreference.com
Definido en el archivo de encabezado <type_traits>
|
||
template< class T, class U > struct is_same; |
(desde C++11) | |
Si T
y U
denominan el mismo tipo (tomando en cuenta las calificaciones const
/volatile
), proporciona la constante miembro value
igual a true. De lo contrario, value
es false.
Se satisface la conmutatividad, es decir, para dos tipos cualesquiera T
y U
, is_same<T, U>::value == true si y solo si is_same<U, T>::value == true.
El comportamiento de un programa que añade especializaciones para is_same
o is_same_v
(desde C++17) no está definido.
Contenido |
[editar] Plantilla de variable auxiliar
template< class T, class U > inline constexpr bool is_same_v = is_same<T, U>::value; |
(desde C++17) | |
Heredado de std::integral_constant
Constantes miembro
value [estático] |
true si T y U son el mismo tipo , 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] Posible implementación
template<class T, class U> struct is_same : std::false_type {}; template<class T> struct is_same<T, T> : std::true_type {}; |
[editar] Ejemplo
Ejecuta este código
#include <iostream> #include <type_traits> #include <cstdint> void print_separator() { std::cout << "-----\n"; } int main() { std::cout << std::boolalpha; // algunos hechos definidos por la implementación std::cout << std::is_same<int, std::int32_t>::value << '\n'; // habitualmente verdadero si 'int' es 32 bit std::cout << std::is_same<int, std::int64_t>::value << '\n'; // posiblemente verdadero si se usa el modelo de datosILP64 print_separator(); // 'float' nunca es un tipo entero std::cout << std::is_same<float, std::int32_t>::value << '\n'; // falso print_separator(); // 'int' es implícitamente 'signed' std::cout << std::is_same<int, int>::value << "\n"; // verdadero std::cout << std::is_same<int, unsigned int>::value << "\n"; // falso std::cout << std::is_same<int, signed int>::value << "\n"; // verdadero print_separator(); // a diferencia de otros tipos, 'char' no es ni 'unsigned' ni 'signed' std::cout << std::is_same<char, char>::value << "\n"; // verdadero std::cout << std::is_same<char, unsigned char>::value << "\n"; // falso std::cout << std::is_same<char, signed char>::value << "\n"; // falso }
Posible salida:
true false ----- false ----- true false true ----- true false false
[editar] Véase también
(C++11) |
Comprueba si un tipo T es entero. (plantilla de clase) |
(C++11) |
Hace al tipo entero dado con signo (plantilla de clase) |
(C++11) |
Hace al tipo entero dado sin signo (plantilla de clase) |