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 杠 (\\)。 (请参见在 预处理程序的阶段转换引用 有关行继续的更多信息。)

请参见

参考

C++文本