如何在C++ raw string literal中添加可被正确解析的注释?
不存在编译器原生支持的方法,可以在raw string字面量的内部插入会被自动忽略的注释。
原因很明确:raw string字面量的核心设计目的就是完全保留分界符之间的所有字符,不做任何转义、过滤处理,你写的//、/* */这类看似注释的内容,都会被原封不动计入最终的字符串值,这是raw string和普通字符串字面量的核心差异,你的需求确实和raw string的设计初衷相悖。
你提到的拆分拼接其实是目前最规范、零开销的解决方案,调整格式后可读性并不差:
const char* s1 = R"foo( Hello )foo" // Say hello to the whole world because we don't know who will run the program. R"foo( World )foo";
C++标准规定相邻的字符串字面量会在编译期自动完成拼接,不管是普通字符串还是raw string都适用,整个过程没有任何运行时开销,最终得到的字符串和你写在同一个raw string里的内容完全一致。
如果实在不想拆分字符串,只能使用非原生方案:比如在raw string内部用自定义的特殊标记包裹注释,再通过自定义预编译脚本在正式编译前把注释内容过滤掉,但这种方案需要额外配置构建流程,对大多数场景来说得不偿失。
内容的提问来源于stack exchange,提问作者Benjy Kessler
相关产品推荐
相关产品推荐

