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