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
имеют специализации для узких и широких строк.