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 > inlineconstexprbool 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ónstd::cout<< std::is_same<int, std::int32_t>::value<<'\n';// habitualmente verdadero si 'int' es 32 bitstd::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 enterostd::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";// verdaderostd::cout<< std::is_same<int, unsignedint>::value<<"\n";// falsostd::cout<< std::is_same<int, signedint>::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";// verdaderostd::cout<< std::is_same<char, unsignedchar>::value<<"\n";// falsostd::cout<< std::is_same<char, signedchar>::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) |