转义序列

< cpp‎ | language

转义序列用于在字符串字面量字符字面量中表示某些特殊字符。

下列转义序列可用(实现可能提供具有由实现定义语义的额外转义序列):

转义序列 描述 表示
\' 单引号 ASCII 编码中为字节 0x27
\" 双引号 ASCII 编码中为字节 0x22
\? 问号 ASCII 编码中为字节 0x3f
\\ 反斜杠 ASCII 编码中为字节 0x5c
\a 响铃 ASCII 编码中为字节 0x07
\b 退格 ASCII 编码中为字节 0x08
\f 换页 ASCII 编码中为字节 0x0c
\n 换行 ASCII 编码中为字节 0x0a
\r 回车 ASCII 编码中为字节 0x0d
\t 水平制表 ASCII 编码中为字节 0x09
\v 垂直制表 ASCII 编码中为字节 0x0b
\nnn 任意八进制值 字节 nnn
\xnn 任意十六进制值 字节 nn
\unnnn
(C++11 起)
通用字符名(任意 Unicode 值)
可能生成多个字符
编码点 U+nnnn
\Unnnnnnnn
(C++11 起)
通用字符名(任意 Unicode 值)
可能生成多个字符
编码点 U+nnnnnnnn

注解

八进制转义序列中 \0 最有用,因为它表示空终止字符串中的空终止字符。

换行符 \n 在用于文本模式 I/O 时有特殊含义:它被转换为特定于 OS 的换行符表示,通常是一个字节或字节序列。某些系统转而用长度字段标记其文本行。

八进制转义序列具有三个八进制位的长度限制,但若提前遇到不是合法八进制位的字符,则在首个这种字符处终止。

十六进制转义序列无长度限制,并在首个不是合法十六进制位的字符处终止。若单个十六进制转义序列所表示的值不适于此字符串字面量或字符常量中使用的字符类型(charchar16_tchar32_twchar_t),则其结果是未指明的。

窄字符串字面量或 16 位字符串字面量中的通用字符名可能映射到多于一个字符,例如 \U0001f34c 在 UTF-8 中是 4 个 char 编码单元(\xF0\x9F\x8D\x8C),而在 UTF-16 中是 2 个 char16_t 编码单元(\uD83C\uDF4C)。

若通用字符名不对应 ISO/IEC 10646 码位(范围 0x0-0x10FFFF,含两端)或若通用字符名对应代用码位(范围 0xD800-0xDFFF,含两端),则程序非良构。

问号转义序列 \? 用于阻止在字符串字面量内转译三标符:如 "??/" 的字符串被编译成 "\",但若如在 "?\?/" 中转义第二个问号,则它变为 "??/"

示例

#include <iostream>
 
int main()
{
    std::cout << "This\nis\na\ntest\n\nShe said, \"How are you?\"\n";
}

输出:

This
is
a
test
 
She said, "How are you?"

参阅