char、wchar_t、char8_t、char16_t、char32_t

char8_twchar_tchar16_tchar32_t 類型 char 是內建類型,代表英數位元、非英數位元字元和非列印字元。

語法

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 charunsigned char 不同的類型。 根據預設,除非 /J 使用編譯器選項,否則 類型的 char 變數會升級為 int ,如同從類型 signed char 升級一樣。 在 下 /J ,它們會被視為類型 unsigned char ,而且會升級為 int ,而不需要簽署延伸模組。

此類型 unsigned char 通常用來表示 位元組 ,這不是 C++ 中的內建類型。

此類型是實作 wchar_t 定義的寬字元類型。 在 Microsoft 編譯器中,它代表 16 位寬字元,用來儲存以 UTF-16LE 編碼的 Unicode,這是 Windows 作業系統上的原生字元類型。 通用 C 執行時間 (UCRT) 程式庫函式的寬字元版本會使用 wchar_t 及其指標和陣列類型作為參數和傳回值,如同原生 Windows API 的寬字元版本一樣。

char8_tchar16_tchar32_t 類型分別代表 8 位、16 位和 32 位寬字元。 ( char8_t 是 C++20 的新功能,需要 /std:c++20/std:c++latest 編譯器選項。編碼為 UTF-8 的 Unicode 可以儲存在 類型中 char8_tchar8_tchar 類型的字串稱為 字串,即使用來編碼 Unicode 或多位元組字元也一樣。 編碼為 UTF-16 的 Unicode 可以儲存在 類型中 char16_t ,而編碼為 UTF-32 的 Unicode 可以儲存在 類型中 char32_t 。 這些型別和 wchar_t 的字串全稱為 字串,不過詞彙通常是指類型的字串 wchar_t

在 C++ 標準程式庫中,類型 basic_string 會針對窄字串和寬字元串進行特製化。 std::string當字元的類型 char 為 時, std::u8string 當字元的類型為 時,當 char16_t 字元 char8_tstd::u16string 的類型為 時, std::u32string 當字元的類型為 時,當字元 char32_t 的類型為 時,以及 std::wstring 字元的類型 wchar_t 為 時使用 。 代表文字的其他類型,包括 std::stringstreamstd::cout 具有窄和寬字元串的特製化。