Compartilhar via


char, wchar_t, char8_t, char16_t, char32_t

Os tipos char, wchar_t, char8_t, char16_t e char32_t são tipos internos que representam caracteres alfanuméricos, glifos não alfanuméricos e caracteres não tipográficos.

Sintaxe

char     ch1{ 'a' };  // or { u8'a' }
wchar_t  ch2{ L'a' };
char16_t ch3{ u'a' };
char32_t ch4{ U'a' };

Comentários

O tipo char era o tipo de caractere original em C e C++. O tipo char armazena caracteres do conjunto de caracteres ASCII ou de qualquer um dos conjuntos de caracteres ISO-8859 e bytes individuais de caracteres de vários bytes, como Shift-JIS ou a codificação UTF-8 do conjunto de caracteres Unicode. No compilador da Microsoft, char é um tipo de 8 bits. É um tipo distinto de ambos signed char e unsigned char. Por padrão, as variáveis do tipo char são promovidas para int como se fossem do tipo signed char, a menos que a opção do compilador /J seja usada. Em/J, elas são tratadas como tipo unsigned char e são promovidas para intsem extensão de sinal.

O tipo unsigned char geralmente é usado para representar um byte, que não é um tipo interno em C++.

O tipo wchar_t é um tipo de caractere largo definido pela implementação. No compilador da Microsoft, ele representa um caractere de 16 bits de largura usado para armazenar Unicode codificado como UTF-16LE, o tipo de caractere nativo em sistemas operacionais Windows. As versões de caractere largo das funções de biblioteca UCRT (Tempo de Execução C Universal) usam wchar_t e seus tipos de ponteiro e matriz como parâmetros e valores retornados, assim como as versões de caractere largo da API nativa do Windows.

Os tipos char8_t, char16_t e char32_t representam caracteres de 8 bits, 16 bits e 32 bits de largura, respectivamente. (char8_t é novo em C++20 e requer a opção do compilador /std:c++20 ou /std:c++latest.) Unicode codificado como UTF-8 pode ser armazenado no tipo char8_t. Cadeias de caracteres do tipo char8_t e char são chamadas de cadeias de caracteres estreitas, mesmo quando usadas para codificar caracteres Unicode ou de vários bytes. Unicode codificado como UTF-16 pode ser armazenado no tipo char16_t e Unicode codificado como UTF-32 pode ser armazenado no tipo char32_t. Todas as cadeias de caracteres desses tipos e wchar_t são conhecidas como cadeias de caracteres largas, embora o termo em geral se refira especificamente a cadeias de caracteres do tipo wchar_t.

Na biblioteca padrão C++, o tipo basic_string é especializado para cadeias de caracteres estreitas e largas. Use std::string quando os caracteres forem do tipo char, std::u8string quando os caracteres forem do tipo char8_t, std::u16string quando os caracteres forem do tipo char16_t, std::u32string quando os caracteres forem do tipo char32_t e std::wstring quando os caracteres forem do tipo wchar_t.

Outros tipos que representam texto, incluindo std::stringstream e std::cout têm especializações para cadeias de caracteres estreitas e largas.