modernize-raw-string-literal

此检查选择性地将包含转义字符的字符串文字替换为原始字符串文字。

示例

const char *const Quotes{"embedded \"quotes\""};
const char *const Paragraph{"Line one.\nLine two.\nLine three.\n"};
const char *const SingleLine{"Single line.\n"};
const char *const TrailingSpace{"Look here -> \n"};
const char *const Tab{"One\tTwo\n"};
const char *const Bell{"Hello!\a  And welcome!"};
const char *const Path{"C:\\Program Files\\Vendor\\Application.exe"};
const char *const RegEx{"\\w\\([a-z]\\)"};

变为

const char *const Quotes{R"(embedded "quotes")"};
const char *const Paragraph{"Line one.\nLine two.\nLine three.\n"};
const char *const SingleLine{"Single line.\n"};
const char *const TrailingSpace{"Look here -> \n"};
const char *const Tab{"One\tTwo\n"};
const char *const Bell{"Hello!\a  And welcome!"};
const char *const Path{R"(C:\Program Files\Vendor\Application.exe)"};
const char *const RegEx{R"(\w\([a-z]\))"};

如果存在以下任何转义字符,则会将字符串转换为原始字符串文字:\\, \', \", \?,以及可打印 ASCII 字符的八进制或十六进制转义字符。

仅包含转义换行符的字符串文字是编写文本输出行的常用方式。在这种情况下,在原始字符串文字中引入物理换行符可能会阻碍可读性。这些字符串文字将保持不变。

转义的水平制表符、换页符或垂直制表符会阻止字符串文字被转换。源代码中存在水平制表符、换页符或垂直制表符在视觉上并不明显。

DelimiterStem

用于转义原始字符串文字中字符的自定义分隔符。它用于以下结构:R"stem_delimiter(contents)stem_delimiter"。默认值为 lit

ReplaceShorterLiterals

控制是否将较短的非原始字符串文字替换为较长的原始字符串文字。将此选项设置为 true 将启用替换。默认值为 false(不会替换较短的文字)。