在 C++11 中增加了定义原始字符串字面量的关键字R。
一,定义方式
R"xxx(原始字符串)xxx"
原始字面量R可以直接表示字符串的实际含义,而不需要额外对字符串做转义或连接等操作。
原始字符串用()括起来,且()前后可以添加字符串,但所添加的字符串必须相同(我也比较奇怪,为什么必须相同)
二,什么是原始字符串。
我们经常会用一个字符串表示目录路径,例如如下表示: c:\a\t
char dir[] = "c:\a\t";
printf("dir=%s\n",dir);
运行上面代码得到如下结果
并不是我们想要的,因为"\"是个转义字符。而我们想要输出c:\a\t,c:\a\t被称为原始字符串。
三,如何输出原始字符串
在C++11之前,我们通过多加一个"\"来输出原始字符串
char dir[] = "c:\\a\\t";
printf("dir=%s\n",dir);
C++11引入了R来表示原始字符串,这样可以省略掉一个“\”
char dir[] = R"(c:\a\t)";
printf("dir=%s\n",dir);
四,R不正确的写法
参考R的定义,以下都是不正确的写法。
char dir[] = R"c:\a\t"; //error: 缺少()
char dir[] = R"a(c:\a\t)";//error: ()前后字符不相同
char dir[] = R"a(c:\a\t)b";//error: ()前后字符不相同
五,R在JSON中的使用。
JSON有个特点,就是引号中嵌套引号。嵌套的引号必须加上"\"字符。
char json[] = "{\"code\":0, \"message\":\"ok\"}";
用R表示的方法如下,可以看出更简洁一些。
char json[] = R"({"code":0, "message":"ok"})";