为 C++ 字符串中的特殊符号 (") 赋予字面意义的高效 C++ 方法
Efficient C++ way of giving literal meaning to special symbols (") in a C++ string
我想把这个:
<script src = "Script2.js" type = "text/javascript"> < / script>
在 std::string
中,所以我在每个双引号 ("
) 之前附加一个 (\
) 符号,以赋予其字面意义 ",而不是在中的字符串分界C++ 像这样:
std::string jsFilesImport = "<script src = \"Script2.js\" type = \"text/javascript\"> < / script>\""
如果我有一个很大的 string
和许多 ("
),则为每个 ("
) 添加 (\
) 变得困难。在 C++ 中有实现此目的的简单方法吗?
最简单的方法是使用 raw string literal:
std::string s = R"x(<script src = "Script2.js" type = "text/javascript"> < / script>)x";
// ^^^^ ^^^
您只需要注意不要在内部提供的文本中使用 x(
)x
分隔符。出现在这些分隔符中的所有其他字符都按原样呈现(包括换行符)。 x
任意选择,也可以是something(
、)something
。
为了防止进一步的问题:
不,不可能1
std::string s = R"resource(
#include "MyRawTextResource.txt"
)resource";
预处理器无法识别 #include "MyRawTextResource.txt"
语句,因为它包含在一对双引号 ("
) 中。
对于这种情况,请考虑引入自定义预构建步骤,在编译前执行文本替换。
1)至少我找不到解决方法。如果有人证明我错了,我将不胜感激。
我想把这个:
<script src = "Script2.js" type = "text/javascript"> < / script>
在 std::string
中,所以我在每个双引号 ("
) 之前附加一个 (\
) 符号,以赋予其字面意义 ",而不是在中的字符串分界C++ 像这样:
std::string jsFilesImport = "<script src = \"Script2.js\" type = \"text/javascript\"> < / script>\""
如果我有一个很大的 string
和许多 ("
),则为每个 ("
) 添加 (\
) 变得困难。在 C++ 中有实现此目的的简单方法吗?
最简单的方法是使用 raw string literal:
std::string s = R"x(<script src = "Script2.js" type = "text/javascript"> < / script>)x";
// ^^^^ ^^^
您只需要注意不要在内部提供的文本中使用 x(
)x
分隔符。出现在这些分隔符中的所有其他字符都按原样呈现(包括换行符)。 x
任意选择,也可以是something(
、)something
。
为了防止进一步的问题:
不,不可能1
std::string s = R"resource(
#include "MyRawTextResource.txt"
)resource";
预处理器无法识别 #include "MyRawTextResource.txt"
语句,因为它包含在一对双引号 ("
) 中。
对于这种情况,请考虑引入自定义预构建步骤,在编译前执行文本替换。
1)至少我找不到解决方法。如果有人证明我错了,我将不胜感激。