char, wchar_t, char8_t, char16_t, char32_t

Typy , , , i są wbudowanymi typami, które reprezentują znaki char wchar_t char8_t char16_t char32_t alfanumeryczne, niealnumeryczne i znaki niedrukowe.

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 znaku w językach C i C++. Typ może służyć do przechowywania znaków z zestawu znaków ASCII lub dowolnego zestawu znaków ISO-8859 oraz pojedynczych bajtów znaków wielo bajtowych, takich jak Shift-JIS lub kodowanie UTF-8 zestawu znaków char Unicode. W kompilatorze firmy Microsoft char typ jest 8-bitowy. Jest to typ odrębny od typu i signed char unsigned char . Domyślnie podniesie się podniesienie do zmiennej typu tak, jakby z typu, char chyba że jest używana opcja int signed char /J kompilatora. W /J obszarze są one traktowane jako typ i są unsigned char podniesiene do int bez rozszerzenia podpisywania.

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

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

Typy char8_t , i reprezentują odpowiednio znaki char16_t char32_t 8-bitowe, 16-bitowe i 32-bitowe. ( char8_t to nowość w języku C++20 i wymaga /std:c++latest opcji kompilatora). Kodowany jako UTF-8 kodowany w formacie Unicode może być przechowywany w char8_t typie . Ciągi i są nazywane wąskimi ciągami, nawet jeśli są używane do kodowania znaków Unicode lub znaków char8_t char wielo bajtowych. Kodowany jako UTF-16 kodowany w formacie Unicode może być przechowywany w typie, a Kodowany jako char16_t UTF-32 kodowany jako UTF-32 może być przechowywany w char32_t typie . Ciągi tych typów i są określane jako ciągi szerokie, chociaż termin często odnosi się wchar_t do ciągów wchar_t typu.

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