C++ 转义字符

在 C++ 中,普通的文字直接写进双引号或单引号里就能正常表示。但如果我们想在文本中表示换行、制表间隔,或者直接输出英文引号与反斜杠本身,按普通字符写进去往往会遇到语法冲突,甚至引发编译报错。

为了解决这个问题,C++ 提供了转义字符(Escape Character)。转义字符由一个反斜杠(\)和紧跟在后面的字符共同组成,用来转变原本字符的含义。

为什么要使用转义字符?

假设我们使用 std::cout 输出一句话,希望屏幕上的文字带有英文双引号:欢迎来到"绿叶网"。不少初学者首先想到的,就是在 “绿叶网” 两边直接加上英文双引号。但只要把代码写成下面这样,编译器就会直接报错:

std::cout << "欢迎来到"绿叶网"";    // 双引号配对冲突

为什么这行代码会报错呢?因为在 C++ 中,英文双引号是标记字符串开始和结束的语法符号,而且总是成对出现的。当编译器读到 "欢迎来到" 后面第二个双引号时,就会认为整个字符串已经结束了,紧接着看到后面的 绿叶网"" 无法识别,所以直接就报错了。

想要把内部的英文双引号当成普通文字输出,我们就需要在它前面加上一个反斜杠,写成 \":

std::cout << "欢迎来到\"绿叶网\"";

这里的 \" 就是转义字符。反斜杠(\)的作用,说白了就是告诉编译器:紧跟在后面的这个字符不要按常规语法符号处理,请按特殊规则来解析。C++ 中最常用的转义字符如下表所示,初学阶段重点掌握这 5 个就够用了。

常见转义字符
转义字符 说明 常见用途
\n 换行符 将光标移到下一行开头继续输出
\t 水平制表符 跳到下一个制表位,常用于拉开多列文字的间距
\" 英文双引号 在双引号字符串内部表示一个普通的双引号字符
\' 英文单引号 在单引号字符内部表示一个普通的单引号字符
\\ 反斜杠 在字符或字符串内部表示一个普通的反斜杠字符

在使用转义字符时,小伙伴们需要注意以下 2 点:

  • 转义字符要严格区分大小写,比如 \n 表示换行符,但如果写成大写的 \N 就会导致编译报错。
  • 转义字符虽然表面上写了 2 个符号,但在内存中整体只算 1 个字符,因此也能用单引号括起来赋给 char 变量,比如写成 char ch = '\n';。

C++ 转义字符的使用

在日常开发中,使用转义字符主要有两个目的:一是表示肉眼 “看不见” 的格式控制字符,比如 \n 和 \t。二是表示与 C++ 语法冲突的字符,比如 \"、\' 和 \\。下面我们结合具体示例来看看它们的用法。

1. 换行符(\n)与制表符(\t)

\n 表示换行,也就是让后面的内容换到下一行开头显示。\t 表示水平制表符,作用相当于按下键盘上的 Tab 键,让光标跳到下一个制表位置。在打印多行多列数据时,我们经常把这两个转义字符配合起来使用。

示例 1:使用 \n 和 \t 排版

#include <iostream>

int main() {
    std::cout << "Name\tScore\n";
    std::cout << "Jack\t95\n";
    std::cout << "Lucy\t88\n";
    return 0;
}

运行结果如下。

Name    Score
Jack    95
Lucy    88

分析:

在这个例子中,"Name\tScore\n" 里的 \t 会在 Name 和 Score 之间拉开一段空白间隔,而末尾的 \n 则负责在输出完 Score 之后换到下一行,让三行数据能够上下对应显示。

需要注意的是,制表符 \t 的宽度并不是固定的,它只是跳到下一个制表位(常见为 4 个或 8 个空格宽),具体表现还会受终端环境影响。如果某一项文字特别长,单纯使用 \t 可能还是对不齐,此时可以配合输出格式化工具来固定列宽。

2. 双引号(\")与单引号(\')

在 C++ 中,双引号用来包裹字符串,单引号用来包裹单个字符。当我们需要把引号本身作为普通字符写进同一种引号内部时,就必须使用 \" 或 \'。

示例 2:输出双引号与单引号

#include <iostream>

int main() {
    char quote = '\'';
    std::cout << "欢迎来到\"绿叶网\"\n";
    std::cout << quote;
    return 0;
}

运行结果如下。

欢迎来到"绿叶网"
'

分析:

char quote = '\''; 表示使用 \' 将一个单引号字符保存在 char 变量中。如果直接写成 ''',这里一共出现了 3 个单引号,编译器无法判断哪两个单引号是一对,就会直接报错。

同理,在 "欢迎来到\"绿叶网\"\n" 中,最外层的两个双引号负责标记字符串的开始与结束,里面的 \" 则表示输出普通的双引号字符。

不过小伙伴们不要误解了,并不是只要看到引号就必须加反斜杠。如果是在双引号字符串里面写单引号,或者在单引号字符里面写双引号,因为内外引号种类不同、不会发生配对冲突,直接写出来就可以了:

std::cout << "Let's go!";    // 双引号内可直接写单引号
char ch = '"';               // 单引号内可直接写双引号

3. 反斜杠(\\)

既然反斜杠(\)本身已经被 C++ 用来充当转义字符的开头了,那么如果我们真的想输出一个普通的反斜杠,此时应该怎么写呢?答案就是连续写两个反斜杠 \\。这种情况在书写 Windows 文件路径时非常常见。

示例 3:输出 Windows 文件路径

#include <iostream>

int main() {
    std::cout << "C:\\new\\test.txt";
    return 0;
}

运行结果如下。

C:\new\test.txt

分析:

"C:\\new\\test.txt" 里的每一对 \\ 都代表一个普通的反斜杠字符,因此最终在屏幕上准确输出为 C:\new\test.txt。

很多初学者在写文件路径时,最容易踩的坑就是只写单个反斜杠:

// 正确方式
std::cout << "C:\\new\\test.txt";

// 错误方式
std::cout << "C:\new\test.txt";

上面错误方式中的 "C:\new\test.txt" 表面看起来像一个正常路径,但编译器会把里面的 \n 当成换行符,把 \t 当成制表符,导致打印出来的结果断成两行且出现大片空白。同理,如果想在屏幕上原样显示出 \n 这两个字符而不是换行,写成 std::cout << "\\n"; 就可以了。

提示 如果文件路径很长,连续写双反斜杠 \\ 比较繁琐。C++11 起支持 R"(...)" 原始字符串写法,比如写成 R"(C:\new\test.txt)" 时里面的反斜杠会全部原样输出,在后面学习 std::string 时还会遇到。

上一篇:

下一篇:

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号