char, wchar_t, char8_t, char16_t, char32_t
Typy , , wchar_t
char8_t
, char16_t
i char32_t
są wbudowanymi typami char
reprezentują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 /J
są 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_t
i 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_t
char32_t
, std::u32string
i std::wstring
gdy znaki są typu wchar_t
. Inne typy reprezentujące tekst, w tym std::stringstream
std::cout
specjalizacje dla wąskich i szerokich ciągów.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla