高效的C++方式,为C++字符串中的特殊符号(")赋予字面意义

cod*_*ver 17 c++ string std string-literals c++11

我想说这个:

<script src = "Script2.js" type = "text/javascript"> < / script>
Run Code Online (Sandbox Code Playgroud)

在一个std::string所以我\在每个双引号(")之前附加一个()符号,给它一个字面含义",而不是像这样的C++中的字符串分界:

std::string jsFilesImport = "<script src = \"Script2.js\" type = \"text/javascript\"> < / script>\""
Run Code Online (Sandbox Code Playgroud)

如果我有string很多("),则\每个(")的添加()变得困难.有一种简单的方法可以在C++中实现这一点吗?

use*_*042 31

最简单的方法是使用原始字符串文字:

std::string s = R"x(<script src = "Script2.js" type = "text/javascript"> < / script>)x";
             // ^^^^                                                                ^^^
Run Code Online (Sandbox Code Playgroud)

您只需要注意x( )x在内部提供的文本中不使用分隔符.出现在这些分隔符中的所有其他字符都按原样呈现(包括换行符).x是任意选择的,可以是something(,)something为好.


为了防止进一步的问题:

不,这是不可能做到1个类似

std::string s = R"resource(
#include "MyRawTextResource.txt"
)resource";
Run Code Online (Sandbox Code Playgroud)

预处理器不会识别该#include "MyRawTextResource.txt"语句,因为它包含在一对双引号(")中.

对于这种情况,请考虑在编译之前引入自定义预构建步骤进行文本替换.


1)至少我无法找到解决方法.感谢有人证明我错了.

  • 对于XML,`]]> <>`将是一个合理的分隔符,因为这个字符序列保证不会出现在格式良好的XML中. (3认同)
  • "我无法找到解决方法." 假设一个普通的char数组是好的,你不关心MSVC:`extern char example []; __asm __(".globl example; example:.incbin \"example.txt \"; .byte 0");` (2认同)