raw string literalspa
以 R"( 開頭, )" 結束,是能夠跨越多行的字符串字面值,轉義字符如 \t\n 在raw string literal中是普通的文本,而再也不是轉義字符,code
下面代碼blog
1 const char* text = R"(Hello\t\n 2 "World"!)"; 3 std::cout << text;
將輸出
Hello\t\n "World"!
若是不使用raw string literal,上面代碼必須這樣寫 const char* text = "Hello\\t\\n\n\"World\"!"; 字符串
由於raw string literal以 )"結束,不能在raw string literal 中再包含字符 )"。下面代碼是非法的。string
const char* text = R"(Embedded )" in string)"; // Error!
若是你想在raw string literal中包含 )",須要使用raw string literal擴展語法:it
const char* raw = R"d-char-sequences(raw-char-sequences)d-char-sequences"
raw-char-sequences 是原始的文本,首尾的 d-char-sequences 是分隔符,首尾分隔符必須同樣,最長爲16個字符,並且 )d-char-sequences 不能在 raw-char-sequences 中出現。io
以前的代碼能夠這樣改正:class
const char* text = R"--(Embedded )" in string)--";
推薦閱讀:Professional C++ 4th 2018版,本文內容基本摘自 Professional C++ 4th 英文版。擴展