C++11新增的一种字符串类型是原始(raw)字符串,在原始(raw)字符串中,字符表示的就是其本身,转义字符会失去意义。\n
不是换行,而是普通的\
和n
字符。
原始(raw)字符串使用R"(
和)"
作为左右边界
#include<iostream>
using namespace std;
int main()
{
char a[] = R"(jing \n \0 "dghtql"!@)";
cout << a << endl;
}
输出:
[Running] cd "d:\程序\随笔程序\2020年1月\" && g++ raw.cpp -o raw && "d:\程序\随笔程序\2020年1月\"raw
jing \n \0 "dghtql"!@
[Done] exited with code=0 in 3.536 seconds
如果是常规的字符串,输出相同的内容,需要这样写
#include<iostream>
using namespace std;
int main()
{
char a[] = "jing \"\\n\" \"\\0\" \"dghtql\"!@";
cout << a << endl;
}
输出:
[Running] cd "d:\程序\随笔程序\2020年1月\" && g++ raw.cpp -o raw && "d:\程序\随笔程序\2020年1月\"raw
jing "\n" "\0" "dghtql"!@
[Done] exited with code=0 in 3.281 seconds
可以看出后一种非常复杂。
如果原始(raw)字符串中本来就包含)"
,会不会直接认为已经到了字符串的结尾?为了避免这种情况,C++11允许程序员在"
和(
放入任意字符,这样的话,在结尾)
和"
之间也得包含相同的字符。如R"*+(dghtql)")*+"
,这样就可以避免错误识别的情况了