一般的转义序列采用如下格式
\ooo
这里的ooo 代表三个八进制数字组成的序列,八进制序列的值代表该字符在机器字符集
里的数字值。下面的示例使用ASCII 码字符集表示文字常量
\7 (bell) \14 (newline)
\0 (null) \062 ('2')
另外字符文字前面可以加L,例如
L'a'
这称为宽字符文字类型为wchar_t,宽字符常量用来支持某些语言的字符集合。如汉语、
日语这些语言中的某些字符不能用单个字符来表示。
字符串文字常量由零个或多个用双引号括起来的字符组成,不可打印字符可以由相应的
转义序列来表示,而一个字符串文字可以扩展到多行,在一行的最后加上一个反斜杠表明
字符串文字在下一行继续。例如
"" (空字符串)
"a"
"\nCC\toptions\tfile.[cC]\n"
"a multi-line \
string literal signals its \
continuation with a backslash"
字符串文字的类型是常量字符数组。它由字符串文字本身以及编译器加上的表示结束的空null 字符构成。例如
'A'
代表单个字符A,下面则表示单个字符A后面跟一个空字符
"A "
空字符是C 和C++用来标记字符串结束的符号
正如存在宽字符文字,比如
L'a'
同样地也有宽字符串文字,它仍然以L 开头如
L"a wide string literal"
宽字符串文字的类型是常量。宽字符的数组它也有一个等价的宽空字符作为结束标志。
如果两个字符串或宽字符串在程序中相邻,C++就会把它们连接在一起并在最后加上
一个空字符。例如
"two" "some"
它的输出结果是twosome,如果将一个字符串常量与一个宽字符串常量连接起来
会发生什么后果。例如
// 不建议这样使用
"two" L"some"
结果是未定义的undefined ——即没有为这两种不同类型的连接定义标准行为。使
用未定义行为的程序被称作是不可移植的,虽然程序可能在当前编译器下能正确执行,但是
不能保证相同的程序在不同的编译器或当前编译器的以后版本下编译后仍然能够正确执
行。在本来能够运行的程序中跟踪这类问题是一件很令人不快的任务,因此建议不要使用
未定义的程序特性。我们会在合适的时候指出这样的特性。