首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++11 原始字符串字面量:替代 C# @逐字字符串實現路徑無轉義

     編輯:程式設計綜合問答

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 + 雙引號 + ( 開始,) + 雙引號 結束。
  • 分隔符可為空,或任意不含空格、括號、反斜杠、換行的字符序列(最多 16 字符)。
  • 內容**完全原樣保留**:反斜、換行、引號、制表符均不轉義,無需 \\、\n。
  • 編碼前綴可組合:u8R\"...\" (UTF-8)、uR\"...\" (UTF-16)、UR\"...\" (UTF-32)、LR\"...\" (寬字符)。

對比表

語言語法示例
C#@\"...\"@\"C:\\Path\"
C++11R\"(...)\"R\"(C:\\Path)\"
C++98/03無原生支持\"C:\\\\Path\" 需雙重轉義

編譯器支持

  • GCC 4.7+、Clang 3.0+、MSVC 19.0 (VS2015) + 完整支持。
  • VS2013 部分支持(需 _ALLOW_RTCc_IN_STL 等宏,建議升級)。

常見陷阱

  • 分隔符不匹配:R\"abc(...)abc\" 要求首尾分隔符完全一致。
  • 內容包含結束序列 )\" 時**必須**使用自定義分隔符。
  • 原始字符串不可拼接:R\"(a)\" R\"(b)\" 為兩個字面量,需靠編譯器相鄰拼接或用 + 運算符。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved