char、wchar_t、char8_t、char16_t、char32_t
类型 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
都不同的类型。 默认情况下,char
类型的变量将提升到 int
,就像是从 signed char
类型一样,除非使用 /J
编译器选项。 在 /J
的情况下,它们被视为 unsigned char
类型并提升为 int
(没有符号扩展)。
类型 unsigned char
通常用于表示 byte,它不是 C++ 中的内置类型。
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
)均可专用于窄字符串和宽字符串。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈