raw string literal
以 R"( 開頭, )" 結束,是可以跨越多行的字符串字面值,轉義字符如 \t\n 在raw string literal中是普通的文本,而不再是轉義字符,
下面代碼
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 中再包含字符 )"。下面代碼是非法的。
const char* text = R"(Embedded )" in string)"; // Error!
如果你想在raw string literal中包含 )",需要使用raw string literal擴展語法:
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 中出現。
之前的代碼可以這樣改正:
const char* text = R"--(Embedded )" in string)--";
推薦閱讀:Professional C++ 4th 2018版,本文內容基本摘自 Professional C++ 4th 英文版。