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 chary 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, longy 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 Tamaño
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.

Consulte también

Intervalos de tipos de datos