Tipos integrados (C++)
Los tipos integrados (también denominados tipos fundamentales) se especifican mediante el estándar del lenguaje C++ y están integrados en el compilador. Los tipos integrados no se definen en ningún archivo de encabezado. Los tipos integrados se dividen en tres categorías principales: entero, punto flotante y void. Los tipos de datos enteros representan números enteros. Los tipos de punto flotante pueden especificar valores que podrían tener partes fraccionarias. El compilador trata la mayoría de los tipos integrados como tipos distintos. Aun así, algunos tipos son sinónimos, o el compilador los trata como tipos equivalentes.
Un tipo void
El tipo void
describe un conjunto de valores vacío. No se puede especificar ninguna variable de tipo void
. El tipo void
se usa principalmente para declarar funciones que no devuelven ningún valor o para declarar punteros genéricos a datos sin tipo o con un tipo arbitrario. Cualquier expresión se puede convertir explícitamente al tipo void
. Sin embargo, estas expresiones se limitan a los siguientes usos:
Una instrucción de expresión. (Para obtener más información, consulte Expresiones).
El operando izquierdo del operador de coma. (Para obtener más información, consulte Operador de coma).
El segundo o tercer operando del operador condicional (
? :
). (Para obtener más información, consulte Expresiones con el operador condicional).
std::nullptr_t
La palabra clave nullptr
es una constante de puntero null de tipo std::nullptr_t
, que se puede convertir a cualquier tipo de puntero sin formato. Para obtener más información, vea nullptr
.
Tipo booleano
El tipo bool
puede tener valores true
y false
. El tamaño del tipo bool
es específico de la implementación. Consulte Tamaños de tipos integrados para obtener detalles de implementación específicos de Microsoft.
Tipos de caracteres
El tipo char
es un tipo de representación de caracteres que codifica eficazmente los miembros del juego básico de caracteres de ejecución. El compilador de C++ trata las variables del tipo char
, signed char
y unsigned char
como si tuvieran tipos diferentes.
Específico de Microsoft: las variables de tipo char
se promueven a int
como si fueran del tipo signed char
de forma predeterminada, a menos que se use la opción de compilación /J
. En ese caso se tratan como de tipo unsigned char
y se promueven a int
sin la extensión de signo.
Una variable de tipo wchar_t
es un carácter ancho o multibyte. Use el prefijo L
delante de un carácter o un literal de cadena para especificar el tipo de carácter ancho.
Específico de Microsoft: de forma predeterminada, wchar_t
es un tipo nativo, pero se puede usar /Zc:wchar_t-
para convertir wchar_t
en una definición de tipo para unsigned short
. El __wchar_t
tipo es un sinónimo específico de Microsoft para el tipo wchar_t
nativo.
El tipo char8_t
se usa para la representación de caracteres UTF-8. Tiene la misma representación que unsigned char
, pero el compilador lo trata como un tipo distinto. El tipo char8_t
es nuevo en C++20. Específico de Microsoft: el uso de char8_t
requiere la opción del compilador /std:c++20
o una versión posterior (como /std:c++latest
).
El tipo char16_t
se usa para la representación de caracteres UTF-16. Debe ser lo suficientemente grande para representar cualquier unidad de código UTF-16. El compilador lo trata como un tipo distinto.
El tipo char32_t
se usa para la representación de caracteres UTF-32. Debe ser lo suficientemente grande para representar cualquier unidad de código UTF-32. El compilador lo trata como un tipo distinto.
Tipos de punto flotante
Los tipos de punto flotante usan una representación IEEE-754 para proporcionar una aproximación de valores fraccionarios en una amplia gama de magnitudes. En la tabla siguiente se muestran los tipos de punto flotante de C++ y las restricciones comparativas en tamaños de tipo de punto flotante. Estas restricciones son obligatorias por el estándar de C++ y son independientes de la implementación de Microsoft. El tamaño absoluto de los tipos de punto flotante integrados no se especifica en el estándar.
Tipo | Contenido |
---|---|
float |
El tipo float es el tipo de punto flotante más pequeño de C++. |
double |
El tipo double es un tipo flotante superior o igual al tipo float , pero inferior o igual al tamaño del tipo long double . |
long double |
El tipo long double es un tipo de punto flotante que es superior o igual al tipo double . |
Específico de Microsoft: la representación de long double
y double
es idéntica. Aun así, el compilador trata long double
y double
como tipos distintos. El compilador de Microsoft C++ usa las representaciones de punto flotante de 4 y 8 bytes conforme a IEEE-754. Para obtener más información, consulte Representación de punto flotante IEEE.
Tipos enteros
El tipo int
es el tipo entero básico predeterminado. Puede representar todos los números enteros en un intervalo específico de la implementación.
Una representación de entero con signo es aquella que puede contener valores positivos y negativos. Se usa de forma predeterminada o cuando está presente la palabra clave modificadora signed
. La palabra clave modificadora unsigned
especifica una representación sin signo que solo puede contener valores no negativos.
Un modificador de tamaño especifica el ancho en bits de la representación de entero que se usa. El lenguaje admite los modificadores short
, long
y long long
. Un tipo short
debe tener al menos 16 bits de ancho. Un tipo long
debe tener al menos 32 bits de ancho. Un tipo long long
debe tener al menos 64 bits de ancho. El estándar especifica una relación de tamaño entre los tipos enteros:
1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
Una implementación debe mantener los requisitos de tamaño mínimo y la relación de tamaño para cada tipo. Aun así, los tamaños reales pueden variar entre implementaciones. Consulte Tamaños de tipos integrados para obtener detalles de implementación específicos de Microsoft.
La palabra clave int
puede omitirse cuando se especifican signed
, unsigned
o modificadores de tamaño. Los modificadores y el tipo int
pueden aparecer en cualquier orden, si están presentes. Por ejemplo, short unsigned
y unsigned int short
hacen referencia al mismo tipo.
Sinónimos de tipos enteros
El compilador considera sinónimos los siguientes grupos de tipos:
short
,short int
, ,signed short
,signed short int
unsigned short
,unsigned short int
int
, ,signed
,signed int
unsigned
,unsigned int
long
,long int
, ,signed long
,signed long int
unsigned long
,unsigned long int
long long
,long long int
, ,signed long long
,signed long long int
unsigned long long
,unsigned long long int
Los tipos enteros específicos de Microsoft incluyen los tipos __int8
, __int16
, __int32
y __int64
de ancho específico. Estos tipos pueden usar los modificadores signed
y unsigned
. El tipo de datos __int8
es sinónimo del tipo char
, __int16
es sinónimo del tipo short
, __int32
es sinónimo del tipo int
y __int64
es sinónimo del tipo long long
.
Tamaños de los tipos integrados
La mayoría de los tipos integrados tienen tamaños definidos por la implementación. En la tabla siguiente se muestra la cantidad de almacenamiento necesaria para los tipos integrados de Microsoft C++. En concreto, long
es de 4 bytes incluso en sistemas operativos de 64 bits.
Tipo | Size |
---|---|
bool , char , char8_t , unsigned char , , signed char , __int8 |
1 byte |
char16_t , __int16 , short , unsigned short , , wchar_t , __wchar_t |
2 bytes |
char32_t , float , __int32 , int , unsigned int , , long unsigned long |
4 bytes |
double , __int64 , long double , , long long , unsigned long long |
8 bytes |
Consulte Intervalos de tipo de datos para obtener un resumen del intervalo de valores de cada tipo.
Para obtener más información sobre la conversión de tipos, consulte Conversiones estándar.