【发布时间】:2014-09-12 19:17:15
【问题描述】:
C++11 中的原始字符串文字非常好,除了格式化它们的明显方式导致多余的换行符 \n 作为第一个字符。
考虑这个例子:
some_code();
std::string text = R"(
This is the first line.
This is the second line.
This is the third line.
)";
more_code();
显而易见的解决方法看起来很丑:
some_code();
std::string text = R"(This is the first line.
This is the second line.
This is the third line.
)";
more_code();
有没有人找到一个优雅的解决方案?
【问题讨论】:
-
我不记得
\\n是否被替换为空格,或者只是加入没有任何空格的行。 -
原始字符串中的所有字符,包括换行符和`\`都按字面意思解释。
-
把
R"(放到下一行 -
@chris 公平地说,该注释本身并没有直接指定任何内容。确实在 2.5 [lex.pptoken] 中:“如果下一个字符开始的字符序列可能是原始字符串文字的前缀和初始双引号,例如 R”,则下一个预处理标记应为原始字符串文字.在原始字符串的初始和最终双引号字符之间,在阶段 1 和 2 中执行的任何转换(三元组、通用字符名称和行拼接)都将被还原;在识别出任何 d-char、r-char 或定界括号之前,此还原应适用。"
-
在其余代码中没有缩进的字符串文字并没有什么优雅的,但是如果您想要这样的多行原始字符串文字 - 无论出于何种原因,不要遵循 Bryan 的理智建议 - 少得到你想要的东西的理智方法是
= 1 + R"(....