Tipos fundamentales
(Véase también tipos para un resumen del sistema de tipos y la lista de utilerías relacionadas con tipos que se suministran por la biblioteca de C++)
Tipo void
void- Un tipo con un conjunto de valores vacío. Es un tipo incompleto que no puede completarse (consecuentemente, objetos de tipovoidno se permiten). No existen arrays devoid, ni referencias avoid. Sin embargo, se permiten punteros avoidy funciones que devuelven tipovoid(procedimientos en otros lenguajes).
std::nullptr_t
<tbody> </tbody>| Definido en el archivo de encabezado <cstddef>
|
||
typedef decltype(nullptr) nullptr_t; |
(desde C++11) | |
std::nullptr_t es el tipo literal de puntero nulo, nullptr. Es un tipo distinto que no es en sí mismo un tipo puntero o un tipo puntero a miembro. Sus valores son la constante de puntero nulo (véase NULL), y puede ser convertido implícitamente a cualquier puntero y puntero a tipo miembro.
sizeof(std::nullptr_t) es igual a sizeof(void *).
Modelos de datos
Las elecciones hechas por cada implementación sobre los tamaños de los tipos fundamentales, se conocen colectivamente como modelos de datos. Cuatro modelos de datos fueron ampliamente aceptados:
Sistemas de 32 bits:
- LP32 or 2/4/4 (int es de 16 bits, long y puntero son de 32 bits)
- Win16 API
- ILP32 or 4/4/4 (int, long, y puntero son de 32 bits);
- Win32 API
- Unix y sistemas similares a Unix (Linux, macOS)
Sistemas de 64 bits:
- LLP64 or 4/4/8 (int y long son de 32 bits, puntero es de 64 bits)
- Win64 API
- LP64 or 4/8/8 (int es de 32 bits, long y puntero son de 64 bits)
- Unix y sistemas similares a Unix (Linux, macOS)
Otros modelos son muy raros. Por ejemplo, ILP64 (8/8/8: int, long, y puntero son de 64 bits) solamente aparecieron en algunos modelos de sistemas iniciales de Unix de 64 bits (p. ej., UNICOS en Cray).
Tipos enteros con signo y sin signo
int- El tipo entero básico. La palabra claveintpuede omitirse si se usa cualquiera de los modificadores listados abajo. Si no se encuentran presentes modificadores de longitud, se garantiza que tendrá al menos una anchura de 16 bits. Sin embargo, en sistemas de 32/64 bits, casi siempre se garantiza que tendrá una anchura de al menos 32 bits (véase abajo).
Modificadores
Modifica el tipo entero. Pueden mezclarse en cualquier orden. Solamente uno de cada grupo puede estar presente en el nombre del tipo.
Signo
signed- El tipo de destino tendrá una representación con signo (este es el modificador por defecto si se omite).unsigned- El tipo de destino tendrá una representación sin signo.
Tamaño
short- El tipo de destino se optimizará por espacio y tendrá una anchura de al menos 16 bits.long- El tipo de destino tendrá una anchura de al menos 32 bits.
|
|
(desde C++11) |
Nota: al igual que todos los especificadores de tipo, se permite cualquier orden: unsigned long long int y long int unsigned long se refieren al mismo tipo.
Propiedades
La siguiente tabla resume todos los tipos enteros disponibles y sus propiedades en varios modelos de datos comunes:
| Especificador de tipo | Tipo equivalente | Anchura en bits por el modelo de datos | ||||
|---|---|---|---|---|---|---|
| C++ standard | LP32 | ILP32 | LLP64 | LP64 | ||
short |
short int
|
al menos 16 |
16 | 16 | 16 | 16 |
short int | ||||||
signed short | ||||||
signed short int | ||||||
unsigned short |
unsigned short int
| |||||
unsigned short int | ||||||
int |
int
|
al menos 16 |
16 | 32 | 32 | 32 |
signed | ||||||
signed int | ||||||
unsigned |
unsigned int
| |||||
unsigned int | ||||||
long |
long int
|
al menos 32 |
32 | 32 | 32 | 64 |
long int | ||||||
signed long | ||||||
signed long int | ||||||
unsigned long |
unsigned long int
| |||||
unsigned long int | ||||||
long long |
long long int (C++11) |
al menos 64 |
64 | 64 | 64 | 64 |
long long int | ||||||
signed long long | ||||||
signed long long int | ||||||
unsigned long long |
unsigned long long int (C++11) | |||||
unsigned long long int | ||||||
Nota: la aritmética de enteros se define de manera diferente para los tipos enteros con signo o sin signo. Véase operadores aritméticos, en particular desbordamiento de enteros.
std::size_t es el tipo entero sin signo del resultado del operador sizeof así como del operador sizeof... y el operador alignof (desde C++11).
|
Véase también Tipos enteros de anchura fija. |
(desde C++11) |
Tipo booleano
bool- Un tipo capaz de mantener uno de dos valores: true o