You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++原始字符串含R"()"引发解析混淆,如何正确转义?

解决C++原始字符串嵌套R"()"的解析混淆问题

这个问题我写代码时也踩过坑!C++的原始字符串字面量默认用)作为结束标记,所以当字符串内容里刚好出现R"()"时,解析器会误把里面的)当成整个原始字符串的结束,直接导致编译报错。

其实解决方法特别简单——给原始字符串加一个自定义分隔符,就能完美避开这个冲突。

原始字符串的完整语法

你之前用的R"(内容)"是简化版,它的完整语法其实是:

R"delim(内容)delim"

这里的delim是可选的自定义分隔符(默认是空),只要满足这些规则就行:

  • 最多包含16个字符
  • 不能有空格、括号()、反斜杠\
  • 不能是单引号'或双引号"

针对你的问题的具体写法

给你的例子加一个不会在内容里出现的分隔符,比如my_tag:

string raw_str = R"my_tag(R"(foo)")my_tag";

这下编译器就会把)my_tag当成整个原始字符串的结束标记,再也不会被内容里的)干扰了。

额外小提醒

如果你的字符串内容里刚好包含了你选的分隔符(比如内容里有)my_tag),那换一个不会冲突的分隔符就行,比如abc_123:

string tricky_str = R"abc_123(R"(foo)abc_123)")abc_123";

只要保证分隔符和内容里的字符串不重复,就不会再出现解析混淆的问题。

内容的提问来源于stack exchange,提问作者One Two Three

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:47:49