书籍:《ISO/IEC 14882 2014》
说明:以上内容大部分来自腾讯元宝。
如何理解以下内容:
字符字面量是用单引号括起来的一个或多个字符,如‘ x ’,前面可选地加上字母u、u或L中的一个,如u‘ y ’、U‘ z ’或L‘ x’。不以u、u或L开头的字符文字是普通字符文字,也称为窄字符文字。包含单个可在执行字符集中表示的c-char的普通字符字面量具有char类型,其值等于执行字符集中c-char编码的数值。包含一个以上c字符的普通字符字面量是多字符字面量。多字符字面量或包含单个在执行字符集中不可表示的c-char的普通字符字面量是有条件支持的,类型为int,并具有实现定义的值。
'c-char-sequence'
'a'
、'\n'
、'\x41'
char
,存储单个字符的编码值(如ASCII码)。char
类型(-128~127或0~255,取决于编译器符号性)。u'y'
、U'z'
、L'x'
前缀 | 类型 | 编码方式 | 示例 |
---|---|---|---|
u |
char16_t |
UTF-16 | u'\u4F60' (汉字) |
U |
char32_t |
UTF-32 | U'\U0001F600' () |
L |
wchar_t |
宽字符(平台相关) | L'Ω' (Unicode) |
char16_t c1 = u'你'; // UTF-16编码
wchar_t c2 = L'©'; // 宽字符(通常4字节)
char32_t c3 = U'\U0001F600'; // UTF-32编码
'c1c2c3...'
(包含多个字符)
'ab'
、'\1\2\3'
int
(条件支持,由编译器决定)int a = 'AB'; // 可能为0x4142(十六进制)或0x4241,取决于编译器
int b = '\1\2\3'; // 可能为0x010203(八进制转义)
'
)、反斜杠(\
)、换行符外的所有可打印字符。\n
(换行)、\\
(反斜杠)、\'
(单引号)等。\101
(十进制65 → 'A')。\x41
(十进制65 → 'A')。\u4F60
(UTF-16编码的汉字“你”)。char c1 = '\x80'; // 可能溢出(char为有符号时值为-128)
char c2 = 'ab'; // 多字符字面量,类型为int
字面量类型 | 类型 | 值规则 |
---|---|---|
普通单字符字面量 | char |
字符的编码值(如'A' → 65) |
普通多字符字面量 | int |
实现定义(如'AB' → 0x4142或0x4241) |
带前缀的宽字符字面量 | char16_t /wchar_t /char32_t |
Unicode码点(如u'\u4F60' → UTF-16编码的汉字“你”) |
u8
前缀(如u8"你好"
),但字符字面量仍需使用u
/U
/L
前缀指定编码类型。wchar_t
时需注意平台差异(Windows为2字节,Linux为4字节)。char c = '\t'; // 正确:制表符
char d = '\0'; // 正确:空字符
char e = '\x'; // 错误:缺少十六进制数字
char f = 'a'; // 正确:单字符
int g = 'ab'; // 合法但值不确定(非可移植代码)
char
,多字符字面量为int
。u
/U
/L
指定Unicode编码类型,需匹配目标字符集。u8
前缀处理UTF-8字符串。