C++字符常数
字符常数是 基本的源字符集,程序编写的字符集的一个或多个成员,用单引号 (')。它们用于表示在 基本执行字符集,在程序执行的计算机上的字符集的字符。
Microsoft 专用
对于 Microsoft C/C++ 编译器,源和执行字符集都 ASCII。
基本的源字符集包含 96 个字符:空格;表示水平制表符、垂直制表符、换页符和换行符的控制字符;因此以下字符: 91
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
_{}] [# () AMP_LTAMP_GT%: ;?。*+-/^ |~! =, \”
基本执行字符集包括在设置的基本源的字符,表示警报的控制字符, backspace,回车和 null。
特定于 Microsoft 的结尾
有三字符常数:
普通字符常数
Multicharacter 常数
宽字符常数
说明 |
---|
在 multicharacter 常数位置使用宽字符常数确保可移植性。 |
字符常数指定为在单引号中的一个或多个字符。例如:
char ch = 'x'; // Specify normal character constant.
int mbch = 'ab'; // Specify system-dependent
// multicharacter constant.
wchar_t wcch = L'ab'; // Specify wide-character constant.
请注意 mbch 是类型 int。如果它声明为类型 char,第二个字节不会保留。multicharacter 常数具有四个有意义的字符;指定多于四生成错误消息。
在字符常数中的字符可以是源字符集的所有映射字符,除换行符、反斜杠 \ 中,单引号 “和 “双引号,使用转义序列,也可以指定。有一些转义序列分为三种:简单,八进制和十六进制转义序列。
简单的转义序列可以包含以下任何一个:
\' \" \? \\
\a \b \f \n \r \t \v
八进制转义序列是 3 个八进制数字顺序执行的反斜杠。
十六进制转义序列是反斜杠,后跟字符 x,后跟十六进制数字序列。
Microsoft C++ 支持普通、 multicharacter 和宽字符常数。使用宽字符常数指定扩展执行字符集的成员 (例如,支持一个国际应用程序)。普通字符常数具有类型 char, multicharacter 常数具有类型 int,并且,宽字符常数具有类型 wchar_t。(类型 wchar_t 在标准定义包含文件 STDDEF.H、 STDLIB.H 和 STRING.H。宽字符函数,但是,将仅在原型 STDLIB.H.)
在规范中的唯一区别在正常和宽字符常数之间是宽字符常数在字母 L之后。例如:
char schar = 'x'; // Normal character constant
wchar_t wchar = L'\x8119'; // Wide-character constant
下表显示了与系统有关或不允许在字符常数中的保留或 nongraphic 字符。应使用转义序列表示这些字符。
C++ 保留或 Nongraphic 字符
字符 |
ASCII 表示形式 |
ASCII 值 |
转义序列 |
---|---|---|---|
换行符 |
NL (LF) |
10 或 0x0a |
\n |
水平制表符 |
HT |
9 |
\t |
垂直制表符 |
VT |
11 或 0x0b |
\v |
Backspace |
BS |
8 |
\b |
回车 |
CR |
13 或 0x0d |
\r |
换页 |
FF |
12 或 0x0c |
\f |
警报 |
贝耳 |
7 |
\a |
反斜杠 |
\ |
92 或 (0x5c) |
\\ |
问号 |
? |
63 或 0x3f |
\? |
单引号 |
' |
39 或 0x27 |
\' |
双引号 |
" |
34 或 0x22 |
\" |
八进制数字 |
ooo |
— |
\ooo |
十六进制数字 |
hhh |
— |
\ xhhh |
null 字符 |
NUL |
0 |
\0 |
如果反斜杠后的字符不指定合法的转义序列,结果是定义的实现。Microsoft C++,反斜杠后的字符按字面,采用,如同将转义不存在,因此,第 1 级警告 (“无法识别的字符转义序列”) 问题。
八进制转义序列,指定在窗体 \ooo,包含反斜杠和一,两个或三个八进制字符。十六进制转义序列,指定在窗体 \ xhhh,包括字符十六进制数字顺序执行的 \x 。不同八进制转义常数,则在十六进制数字个数的限制在转义序列的。
八进制转义序列由不是一个八进制数字的第一个字符终止,或者,在三个字符显示时。例如:
wchar_t och = L'\076a'; // Sequence terminates at a
char ch = '\233'; // Sequence terminates after 3 characters
同样,十六进制转义序列停止在不是一个十六进制数字的第一个字符。由于十六进制数字通过 f 包含字母 a (和 A 通过 F),请确定转义序列停止在与预期的数字。
由于单引号 (') 将字符常数,请使用转义序列 \' 表示用单引号。双引号 (") 来表示,而无需转义序列。反斜杠字符 (\) 是行继续符,在放置在行尾。如果要反斜杠字符在字符常数中出现,则必须连续 type2 杠 (\\)。(请参见在 预处理程序的阶段转换引用 有关行继续的更多信息。)