char, wchar_t, char8_t, char16_t, char32_t

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

Синтаксис

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

Замечания

Тип 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_tchar16_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 типа.

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