char, wchar_t, char8_t, char16_t, char32_t

Типы char, wchar_t, char8_t, char16_t, и char32_t — это встроенные типы, представляющие буквенно-цифровые символы, не буквенно-цифровые глифы и непечатаемые символы.

Синтаксис

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

Remarks

Тип char был исходным типом символа в C и C++. Тип char можно использовать для хранения символов из кодировки ASCII или любой из наборов символов ISO-8859, а также отдельных байтов многобайтовых символов, таких как SHIFT-JIS или кодировка UTF-8 в кодировке Юникод. В компиляторе char Майкрософт — это 8-разрядный тип. Это отличный тип как от , так signed char и unsigned charот . По умолчанию переменные типа char получают значение , int как будто из типа signed char , если /J не используется параметр компилятора. В /Jони рассматриваются как тип unsigned char и получают повышение до int без расширения знака.

Тип unsigned char часто используется для представления байта, который не является встроенным типом в C++.

Тип wchar_t является определяемым реализацией расширенным типом символов. В компиляторе Майкрософт он представляет 16-разрядный символ, используемый для хранения Юникода в кодировке UTF-16LE, собственного типа символов в операционных системах Windows. В расширенных версиях символов функций библиотеки Универсальной среды выполнения C (UCRT) используются wchar_t и типы указателей и массивов в качестве параметров и возвращаемых значений, как и версии для расширенных символов собственного API Windows.

char8_tТипы , char16_tи char32_t представляют 8-разрядные, 16-разрядные и 32-разрядные символы соответственно. (char8_t является новым в C++20 и требует параметра компилятора /std:c++20 или /std:c++latest .) Юникод, закодированный как UTF-8, может храниться в типе char8_t . char8_t Строки типа и char называются узкими строками, даже если они используются для кодирования символов Юникода или многобайтовых символов. Юникод, закодированный как UTF-16, может храниться в типе char16_t , а Юникод в кодировке UTF-32 — в типе char32_t . Строки этих типов и wchar_t называются широкими строками, хотя термин часто относится именно к строкам wchar_t типа .

В стандартной библиотеке C++ тип предназначен как для узких, basic_string так и для широких строк. Используется std::string , если символы относятся к типу char, std::u8string если символы относятся к типу char8_t, std::u16string если символы относятся к типу char16_t, std::u32string если символы относятся к типу char32_t, и std::wstring если символы имеют тип wchar_t. Другие типы, представляющие текст, включая std::stringstream и std::cout имеют специализации для узких и широких строк.