如何解决C++原始字符串包含终止符时的编译报错问题?
解决C++原始字符串包含默认终止符的问题
这个问题我之前处理过好几次,本质就是C++原始字符串的默认终止符和你要写的内容撞车了,咱们分分钟搞定它~
首先得明确C++原始字符串的完整语法:原始字符串的标准格式是 R"delim(原始内容)delim",其中delim是可选的自定义分隔符。当你不写delim的时候,默认的终止符就是)"——这正好是你字符串里"(add)"最后那两个字符,编译器会误以为这里就是原始字符串的结束位置,自然就报错了。
解决方法超简单:给原始字符串加一个自定义分隔符,只要这个分隔符不在你的目标字符串里出现就行。比如咱们可以选一个简单的标记,比如tag、xxx或者任意符合规则的字符组合:
举个例子,你想要得到字符串"(add)",可以这么写:
auto tag = R"tag("(add)")tag";
或者换个更简洁的分隔符,比如下划线_:
auto tag = R"_("(add)")_";
这里要注意两个小规则:
- 分隔符
delim最多可以有16个字符,不能包含空格、括号()、反斜杠\和控制字符 - 开头的
R"delim(和结尾的)delim"必须严格对应,分隔符要完全一致
这样编译器就会把中间的"(add)"完整识别成原始字符串内容,不会再误判终止位置啦。
内容的提问来源于stack exchange,提问作者freyone
相关产品推荐
相关产品推荐

