char, wchar_t, char8_t, char16_t, char32_t

Typy , , wchar_tchar8_t, char16_ti char32_t są wbudowanymi typami charreprezentującymi znaki alfanumeryczne, nienumeryczne lify i znaki inne niż drukowanie.

Składnia

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

Uwagi

Typ char był oryginalnym typem znaków w językach C i C++. Typ char może służyć do przechowywania znaków z zestawu znaków ASCII lub dowolnego z zestawów znaków ISO-8859 oraz pojedynczych bajtów znaków wielobajtowych, takich jak Shift-JIS lub kodowanie UTF-8 zestawu znaków Unicode. W kompilatorze char firmy Microsoft jest typem 8-bitowym. Jest to odrębny typ zarówno, jak signed char i unsigned char. Domyślnie zmienne typu char są promowane tak int , jakby z typu signed char , chyba że jest używana opcja kompilatora /J . W obszarze /Jsą one traktowane jako typ unsigned char i są promowane do int bez rozszerzenia podpisywania.

Typ unsigned char jest często używany do reprezentowania bajtu, który nie jest wbudowanym typem języka C++.

Typ wchar_t jest typem znaków zdefiniowanym przez implementację. W kompilatorze firmy Microsoft reprezentuje 16-bitowy znak używany do przechowywania kodowania Unicode jako UTF-16LE, natywnego typu znaku w systemach operacyjnych Windows. Szerokie wersje znaków funkcji biblioteki universal C Runtime (UCRT) używają wchar_t i jego wskaźników i typów tablic jako parametrów i wartości zwracanych, podobnie jak szerokie wersje znaków natywnego interfejsu API systemu Windows.

Typy char8_t, char16_ti char32_t reprezentują odpowiednio znaki 8-bitowe, 16-bitowe i 32-bitowe. (char8_t jest nowy w języku C++20 i wymaga /std:c++20 opcji lub /std:c++latest kompilatora). Kodowanie Unicode jako UTF-8 może być przechowywane w typie char8_t . Ciągi char8_t typu i char są określane jako wąskie ciągi, nawet jeśli są używane do kodowania znaków Unicode lub wielu bajtów. Kodowanie Unicode jako UTF-16 może być przechowywane w typie char16_t , a kodowanie Unicode jako UTF-32 może być przechowywane w typie char32_t . Ciągi tych typów i wchar_t są określane jako szerokie ciągi, choć termin często odnosi się konkretnie do ciągów wchar_t typu.

W standardowej bibliotece basic_string języka C++ typ jest wyspecjalizowany zarówno dla wąskich, jak i szerokich ciągów. Użyjstd::string, gdy znaki są typu char, std::u8string gdy znaki są typu , std::u16string gdy znaki są typu char8_t, gdy znaki są typu , gdy znaki są typu char16_tchar32_t, std::u32string i std::wstring gdy znaki są typu wchar_t. Inne typy reprezentujące tekst, w tym std::stringstreamstd::cout specjalizacje dla wąskich i szerokich ciągów.