Tipos internos (C++)

Tipos internos (também chamados de tipos fundamentais) são especificados pelo padrão de linguagem C++ e incorporados ao compilador. Os tipos internos não são definidos em nenhum arquivo de cabeçalho. Os tipos internos são divididos em três categorias principais: integral, floating-point e void. Tipos integrais representam números inteiros. Tipos floating-point podem especificar valores que podem ter partes fracionárias. A maioria dos tipos internos é tratada como tipos distintos pelo compilador. No entanto, alguns tipos são sinônimos ou tratados como tipos equivalentes pelo compilador.

Tipo void

O tipo void descreve um conjunto vazio de valores. Nenhuma variável do tipo void pode ser especificada. O tipo void é usado basicamente para declarar funções que não retornam nenhum valor ou para declarar ponteiros genéricos para dados não digitados ou digitados arbitrariamente. Qualquer expressão pode ser explicitamente convertida no tipo void. No entanto, tais expressões estão restritas aos seguintes usos:

std::nullptr_t

A palavra-chave nullptr é uma constante do ponteiro nulo do tipo std::nullptr_t, que é conversível em qualquer tipo bruto de ponteiro. Para obter mais informações, consulte nullptr.

Tipos boolianos

O tipo bool pode ter valores true e false. O tamanho do tipo bool é específico da implementação. Consulte Tamanhos de tipos internos para obter detalhes de implementação específicos da Microsoft.

Tipos de caractere

O tipo char é um tipo de representação de caractere que codifica com eficiência os membros do conjunto de caracteres de execução básico. O compilador do C++ trata variáveis do tipo char, signed char e unsigned char como tendo tipos diferentes.

Específico da Microsof: as variáveis do tipo char são promovidas para int como se fossem do tipo signed char por padrão, a menos que a opção de compilação /J seja usada. Nesse caso, elas são tratadas como tipo unsigned char e promovidas a int sem extensão de sinal.

Uma variável do tipo wchar_t designa um tipo de caractere largo ou caractere multibyte. Use o prefixo L antes de um literal de caractere ou cadeia de caracteres para especificar o tipo de caractere largo.

Específico da Microsoft: por padrão, wchar_t é um tipo nativo, mas você pode usar /Zc:wchar_t- para tornar wchar_t um typedef para unsigned short. O tipo __wchar_t é um sinônimo específico da Microsoft para o tipo wchar_t nativo.

O tipo char8_t é usado para a representação de caracteres UTF-8. Ele tem a mesma representação que unsigned char, mas é tratado como um tipo distinto pelo compilador. O tipo char8_t é novo no C++20. Específico da Microsoft: o uso de char8_t requer a opção do compilador /std:c++20 ou posterior (como /std:c++latest).

O tipo char16_t é usado para a representação de caracteres UTF-16. Deve ser grande o suficiente para representar qualquer unidade de código UTF-16. Ele é tratado como um tipo distinto pelo compilador.

O tipo char32_t é usado para a representação de caracteres UTF-32. Deve ser grande o suficiente para representar qualquer unidade de código UTF-32. Ele é tratado como um tipo distinto pelo compilador.

Tipos de ponto flutuante

Os tipos de ponto flutuante usam uma representação IEEE-754 para fornecer uma aproximação de valores fracionários em uma ampla gama de magnitudes. A tabela a seguir lista os tipos de ponto flutuante em C++ e as restrições comparativas em tamanhos de tipo de ponto flutuante. Essas restrições são exigidas pelo padrão C++ e são independentes da implementação da Microsoft. O tamanho absoluto dos tipos de ponto flutuante internos não é especificado no padrão.

Tipo Sumário
float O tipo float é o menor tipo de ponto flutuante em C++.
double O tipo double é um tipo de ponto flutuante que é maior ou igual ao tipo float, mas é menor ou igual ao tamanho do tipo long double.
long double Tipo long double é um tipo de ponto flutuante que é maior ou igual ao tipo double.

Específico da Microsoft: a representação de long double e double é idêntica. No entanto, long double e double são tratados como tipos distintos pelo compilador. O compilador do Microsoft C++ usa as representações de ponto flutuante IEEE-754 de 4 e 8 bytes. Para obter mais informações, consulte a representação de ponto flutuante do IEEE.

Tipos de inteiro

O tipo int é o tipo inteiro básico padrão. Ele pode representar todos os números inteiros em um intervalo específico da implementação.

Uma representação de inteiro com sinal é aquela que pode conter valores positivos e negativos. Ela é usada por padrão ou quando a palavra-chave do modificador signed está presente. A palavra-chave do modificador unsigned especifica uma representação não assinada que só pode conter valores não negativos.

Um modificador de tamanho especifica a largura em bits da representação de inteiro usada. A linguagem dá suporte aos modificadores short, long e long long. Um tipo short deve ter pelo menos 16 bits de extensão. Um tipo long deve ter pelo menos 32 bits de extensão. Um tipo long long deve ter pelo menos 64 bits de extensão. O padrão especifica uma relação de tamanho entre os tipos integrais:

1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

Uma implementação deve manter os requisitos mínimos de tamanho e a relação de tamanho para cada tipo. No entanto, os tamanhos reais podem e variam entre implementações. Consulte Tamanhos de tipos internos para obter detalhes de implementação específicos da Microsoft.

A palavra-chave int pode ser omitida quando os modificadores signed, unsigned ou de tamanho são especificados. Os modificadores e o tipo int, se presentes, podem aparecer em qualquer ordem. Por exemplo, short unsigned e unsigned int short se referem ao mesmo tipo.

Sinônimos de tipo inteiro

Os seguintes grupos de tipos são considerados sinônimos pelo compilador:

  • 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

Os tipos inteiros específicos da Microsoft incluem os tipos __int8, __int16, __int32 e __int64 de extensão específica. Esses tipos podem usar os modificadores signed e unsigned. O tipo de dados __int8 é sinônimo do tipo char, __int16 é sinônimo do tipo short, __int32 é sinônimo do tipo int e __int64 é sinônimo do tipo long long.

Tamanhos de tipos incorporados.

A maioria dos tipos internos tem tamanhos definidos pela implementação. A tabela a seguir lista a quantidade de armazenamento necessária para tipos internos no Microsoft C++. Em particular, long são 4 bytes mesmo em sistemas operacionais de 64 bits.

Tipo Tamanho
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 tipos de dados para ver um resumo do intervalo de valores de cada tipo.

Para obter mais informações sobre a conversão de tipos, consulte Conversões padrão.

Confira também

Intervalos de tipos de dados