Escape sequences
转义序列用于在 字符串字面量 和 字符字面量 中表示某些特殊字符。
以下转义序列可用:
|
转义
序列 |
描述 | 表示形式 |
|---|---|---|
| 简单转义序列 | ||
\'
|
单引号 |
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
(1~3 位八进制数字)
|
\o{
n...
}
(自 C++23 起)
|
码元
n...
(任意数量八进制数字)
|
|
\x
n...
|
任意十六进制值 |
码元
n...
(任意数量十六进制数字)
|
\x{
n...
}
(自 C++23 起)
|
||
| 条件转义序列 [1] | ||
\
c
|
由实现定义 | 由实现定义 |
| 通用字符名称 | ||
\u
nnnn
|
任意
Unicode
值;
可能产生多个码元 |
码点
U+
nnnn
(4 位十六进制数字)
|
\u{
n...
}
(自 C++23 起)
|
码点
U+
n...
(任意数量十六进制数字)
|
|
\U
nnnnnnnn
|
码点
U+
nnnnnnnn
(8 位十六进制数字)
|
|
\N{
NAME
}
(自 C++23 起)
|
任意 Unicode 字符 |
由
NAME
命名的字符 (参见
下文
)
|
内容通用字符名范围
注释\ 0 是最常用的八进制转义序列,因为它表示 空终止字符串 中的终止空字符。 换行符 \n 在 文本模式 I/O 中使用时具有特殊含义:它会被转换为操作系统特定的换行表示形式,通常是一个字节或字节序列。某些系统则使用长度字段来标记行尾。 八进制转义序列最多包含三个八进制数字,但若遇到非有效八进制数字的字符则会提前终止。 十六进制转义序列没有长度限制,会在遇到第一个非有效十六进制数字符时终止。若单个十六进制转义序列所表示的值超出该字符串字面值所用字符类型( char 、 char8_t , (C++20 起) char16_t , char32_t , (C++11 起) 或 wchar_t )所表示的数值范围,则结果未定义。
问号转义序列 \ ? 用于防止字符串字面值内的 三字符组 被解释:例如字符串 "??/" 会被编译为 " \" ,但若第二个问号被转义,如 "? \? /" ,则会变成 "??/" 。 由于三字符组已从 C++ 中移除,问号转义序列不再必要。该特性被保留以兼容 C++14(及先前版本)和 C 语言。 (C++17 起)
示例
运行此代码
输出: This is a test She said, "Sells she seashells on the seashore?" 缺陷报告以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
参见
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||