char, wchar_t, char8_t, char16_t, char32_t

Les types , , char8_twchar_tchar16_t, char32_t et sont des types charintégrés qui représentent des caractères alphanumériques, des glyphes non alphanumériques et des caractères non imprimables.

Syntaxe

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

Notes

Le char type était le type de caractère d’origine en C et C++. Le char type peut être utilisé pour stocker des caractères à partir du jeu de caractères ASCII ou de l’un des jeux de caractères ISO-8859, ainsi que des octets individuels de caractères multioctets tels que Shift-JIS ou l’encodage UTF-8 du jeu de caractères Unicode. Dans le compilateur Microsoft, char il s’agit d’un type 8 bits. Il s’agit d’un type distinct des deux signed char et unsigned char. Par défaut, les variables de type char sont promues comme int si à partir du type signed char , sauf si l’option du /J compilateur est utilisée. Sous /J, ils sont traités comme unsigned char type et sont promus int sans extension de signe.

Le type unsigned char est souvent utilisé pour représenter un octet, qui n’est pas un type intégré en C++.

Le wchar_t type est un type de caractère large défini par l’implémentation. Dans le compilateur Microsoft, il représente un caractère à l’échelle 16 bits utilisé pour stocker Unicode encodé en UTF-16LE, le type de caractère natif sur les systèmes d’exploitation Windows. Les versions à caractères larges des fonctions de bibliothèque UCRT (Universal C Runtime) utilisent wchar_t et ses types de pointeur et de tableau en tant que paramètres et valeurs de retour, comme les versions de caractères larges de l’API Windows native.

Les char8_ttypes et char32_t les types char16_treprésentent respectivement des caractères larges 8 bits, 16 bits et 32 bits. (char8_t est nouveau dans C++20 et nécessite l’option ou /std:c++latest le /std:c++20 compilateur.) Unicode encodé en UTF-8 peut être stocké dans le char8_t type. Les chaînes de char8_t type et char de type sont appelées chaînes étroites , même lorsqu’elles sont utilisées pour encoder des caractères Unicode ou multioctets. Unicode encodé en UTF-16 peut être stocké dans le char16_t type, et Unicode encodé en UTF-32 peut être stocké dans le char32_t type. Les chaînes de ces types et wchar_t sont toutes appelées chaînes larges , bien que le terme fait souvent référence spécifiquement aux chaînes de wchar_t type.

Dans la bibliothèque standard C++, le basic_string type est spécialisé pour les chaînes étroites et larges. Utilisez std::string quand les caractères sont de type char, std::u8string lorsque les caractères sont de type char8_t, std::u16string lorsque les caractères sont de type char16_t, lorsque les caractères sont de type , std::u32string lorsque les caractères sont de type char32_t, et std::wstring quand les caractères sont de type wchar_t. Autres types qui représentent du texte, y compris std::stringstream et std::cout qui ont des spécialisations pour les chaînes étroites et larges.