C# 中 @\"C:\\Program Files\\DigiDNA\\DiskAid\" 逐字字符串可直接包含反斜杠無需轉義。C++11 引入**原始字符串字面量**,提供同等便利性,語法為 R\"分隔符(內容)分隔符\"。
// 最簡單形式:分隔符為空
std::string path = R"(C:\Program Files\DigiDNA\DiskAid)";
// 內容包含括號或雙引號時,自定義分隔符(最多 16 字符)
std::string json = R"DELIMITER({
"path": "C:\Program Files\DigiDNA\DiskAid",
"note": "包含 ) 和 \" 都無需轉義"
})DELIMITER";
// 多行字符串(保留換行)
std::string sql = R"SQL(
SELECT * FROM users
WHERE name = 'O''Reilly'
AND path LIKE 'C:\%'
)SQL";
R + 雙引號 + ( 開始,) + 雙引號 結束。\\、\n。u8R\"...\" (UTF-8)、uR\"...\" (UTF-16)、UR\"...\" (UTF-32)、LR\"...\" (寬字符)。| 語言 | 語法 | 示例 |
|---|---|---|
| C# | @\"...\" | @\"C:\\Path\" |
| C++11 | R\"(...)\" | R\"(C:\\Path)\" |
| C++98/03 | 無原生支持 | \"C:\\\\Path\" 需雙重轉義 |
_ALLOW_RTCc_IN_STL 等宏,建議升級)。R\"abc(...)abc\" 要求首尾分隔符完全一致。)\" 時**必須**使用自定義分隔符。R\"(a)\" R\"(b)\" 為兩個字面量,需靠編譯器相鄰拼接或用 + 運算符。