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 int
sem 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.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de