Qual é o tamanho do tipo int, longo, do padrão C++?

I'm procurando por informações detalhadas sobre o tamanho dos tipos básicos de C++. Eu sei que depende da arquitetura (16 bits, 32 bits, 64 bits) e do compilador.

Mas há algum padrão para C++?

I'm usando o Visual Studio 2008 em uma arquitetura 32-bit. Aqui está o que eu recebo:

char  : 1 byte
short : 2 bytes
int   : 4 bytes
long  : 4 bytes
float : 4 bytes
double: 8 bytes

Tentei encontrar, sem muito sucesso, informações confiáveis com os tamanhos de char, short, int, long, double, float (e outros tipos que eu não pensei't think of) sob diferentes arquiteturas e compiladores.

Na prática não há... 39; não há tal coisa. Muitas vezes você pode esperar que std::size_t represente o tamanho inteiro nativo não assinado na arquitetura atual. ou seja, 16-bit, 32-bit ou 64-bit mas é'nem sempre é o caso como apontado nos comentários a esta resposta.

No que diz respeito a todos os outros tipos incorporados, depende realmente do compilador. Aqui's dois trechos extraídos do rascunho de trabalho atual do último padrão C++:

Há cinco tipos inteiros padrão assinados: char, int curto, int, int longo, e int longo longo. Nesta lista, cada tipo fornece pelo menos a mesma quantidade de armazenamento que os que o precedem na lista.

Para cada um dos tipos inteiros padrão assinados, existe um tipo inteiro padrão correspondente (mas diferente) não assinado: char não assinado, int curto não assinado, int não assinado, int longo não assinado e int longo não assinado, cada um dos quais ocupa a mesma quantidade de armazenamento e tem os mesmos requisitos de alinhamento.

Se você quiser, pode afirmar estaticamente (tempo de compilação) o tamanho desses tipos fundamentais. Ele alertará as pessoas para pensar em portar o seu código se o tamanho das suposições mudar.

Comentários (2)

Como mencionado, o tamanho deve refletir a arquitetura atual. Você pode pegar um pico em limits.h se você quiser ver como seu compilador atual está lidando com as coisas.

Comentários (1)

Como você mencionou - depende em grande parte do compilador e da plataforma. Para isso, verifique a norma ANSI, http://home.att.net/~jackklein/c/inttypes.html

Aqui está o do compilador da Microsoft: Faixas de Tipo de Dados.

Comentários (0)