共用方式為


char、wchar_t、char8_t、char16_t、char32_t

型別 charwchar_tchar8_tchar16_tchar32_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 charunsigned 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_tchar16_tchar32_t 型別分別代表 8 位元、16 位元和 32 位元寬字元。 (char8_t 是 C++20 的新功能,需要 /std:c++20/std:c++latest 編譯器選項。)編碼為 UTF-8 的 Unicode 可以儲存在 char8_t 型別中。 char8_tchar 型別的字串稱為窄字串,即使用來編碼 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::stringstreamstd::cout) 具有窄和寬字串的特製化。