型別 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' };
備註
char
型別是 C 和 C++ 中的原始字元型別。 char
型別會儲存 ASCII 字元集或任何 ISO-8859 字元集中的字元,以及多位元組字元的個別位元組,例如 Shift-JIS 或 Unicode 字元集的 UTF-8 編碼。 在 Microsoft 編譯器中,char
是 8 位元型別。 這是與 signed char
和 unsigned char
都不同的型別。 根據預設,除非使用 /J
編譯器選項,否則型別 char
的變數會升階為 int
,如同從型別 signed char
升階一樣。 在 /J
下方,它們會被視為型別 unsigned char
,且會升階為 int
,而不需要簽署延伸模組。
型別 unsigned char
通常用來代表非 C++ 中內建型別的「位元組」(byte)。
wchar_t
型別是實作定義的寬字元型別。 在 Microsoft 編譯器中,它代表 16 位元寬字元,用來儲存以 UTF-16LE 編碼的 Unicode,這是 Windows 作業系統上的原生字元型別。 通用 C 執行階段 (UCRT) 程式庫函式的寬字元版本會使用 wchar_t
及其指標和陣列型別作為參數和傳回值,如同原生 Windows API 的寬字元版本一樣。
char8_t
、char16_t
和 char32_t
型別分別代表 8 位元、16 位元和 32 位元寬字元。 (char8_t
是 C++20 的新功能,需要 /std:c++20
或 /std:c++latest
編譯器選項。)編碼為 UTF-8 的 Unicode 可以儲存在 char8_t
型別中。 char8_t
和 char
型別的字串稱為窄字串,即使用來編碼 Unicode 或多位元組字元也一樣。 編碼為 UTF-16 的 Unicode 可以儲存在 char16_t
型別中,而編碼為 UTF-32 的 Unicode 可以儲存在 char32_t
型別中。 這些型別和 wchar_t
的字串都稱為寬字串,不過該詞彙特別是指 wchar_t
型別的字串。
在 C++ 標準程式庫中,basic_string
型別是專為窄和寬字串特製化。 當字元的型別為 char
時使用 std::string
,當字元的型別為 char8_t
時使用 std::u8string
,當字元的型別為 char16_t
時使用 std::u16string
,當字元的型別為 char32_t
時使用 std::u32string
,以及當字元的型別為 wchar_t
時使用 std::wstring
。
代表文字的其他型別 (包括 std::stringstream
和 std::cout
) 具有窄和寬字串的特製化。