C++11新特性 —— 原始字符串字面量(Raw String Literal)

原始字符串就是 “原生的、不加处理的”,字符表示所见即所得,引号、斜杠无需 “\” 转义,比如常用的目录表示,引入原始字符串后,非常方便。

格式如下:

 R"(原始字符串)";

R 只会处理括号中的字符串

原始字面量 R 可以直接表示字符串的实际含义,而不需要额外对字符串做转义等操作,可以理解为是忽略所有转义字符的一个字符串格式。

#include <iostream>
using namespace std;

int main()
{
    const char* s1 = "Hello\\World";
	cout << s1 << endl;
	const char* s2 = R"(Hello\\World)";
	cout << s2 << endl;
	return 0;
}

输出结果:
Hello\World
Hello\\World

Windows 文件路径:R"(C:\ProgamFiles\xx\xx\xx.exe)"

Json 字符串:R"({"name":"xx", "age":10})"

只需要使用 R 字符串,就能正常编写 json 格式的字符串。如果不使用 R 字符串,就必须给 Json 中的每一个 " 添加用于转义的 \",大大增加了代码的繁琐性,而且还容易出现漏加转义而导致的 Bug。


优点:

  1. 换行能很好的保留,其他方式都需要人工加 \n 实现换行。
  2. 方便拷贝字符串:将拷贝的字符串直接替换 R"(...)" 中的 ...,非常方便。而其他方式都需要过多的干预拷贝的字符串,非常容易出错。