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++ 中的原始字符类型。 类型可用于存储 ASCII 字符集或任何 ISO-8859 字符集的字符,以及多字节字符(如 char Shift-JIS 或 Unicode 字符集的 UTF-8 编码)的单个字节。 在 Microsoft 编译器中, char 是一个 8 位类型。 它是与 和 不同的 signed char 类型 unsigned char 。 默认情况下,类型为 的变量将提升为 ,就像从 类型升级一 charintsigned char 样,除非使用 /J 编译器选项。 在 /J 下,它们被视为类型, unsigned char 并提升为 int 不带符号扩展名的 。

类型 unsigned char 通常用于表示字节 ,它不是unsigned charC++ 中的内置类型。

类型 wchar_t 是实现定义的宽字符类型。 在 Microsoft 编译器中,它表示一个 16 位宽字符,用于存储编码为 UTF-16LE 的 Unicode,该 Unicode 是操作系统上的Windows类型。 通用 C 运行时 (UCRT) 库函数的宽字符版本使用 及其指针和数组类型作为参数和返回值,本机 Windows API 的宽字符 wchar_t 版本也一样。

char8_tchar16_tchar32_t 类型分别表示 8 位、16 位和 32 位宽字符。 (char8_t C++20 中的新增功能,需要 /std:c++20/std:c++latest 编译器选项.) 编码为 UTF-8 的 Unicode 可以存储在 char8_t 类型中。 和 char8_t 类型的 char 字符串称为窄字符串,即使char8_t用于对 Unicode 或多字节字符进行编码。 编码为 UTF-16 的 Unicode 可以存储在 类型中,编码为 char16_t UTF-32 的 Unicode 可以存储在 char32_t 类型中。 这些类型和 的字符串 wchar_t 都称为宽字符串,尽管wchar_t术语通常专门指类型的 wchar_t 字符串。

在 C++ 标准库中, basic_string 类型适用于窄字符串和宽字符串。 当字符的类型为 时,以及当字符的类型为 时 std::stringcharstd::u8stringchar8_tstd::u16stringchar16_tstd::u32stringchar32_tstd::wstring ,使用 wchar_t 。 表示文本的其他类型,包括 std::stringstreamstd::cout 具有窄字符串和宽字符串的专用化。