【问题标题】:Does \u0052\u0022 start a raw string?\u0052\u0022 是否开始一个原始字符串?
【发布时间】:2013-02-22 23:31:39
【问题描述】:

假设我们有以下内容:

\u0052\
\u0022\u0058(Please no?)\u0058\u0022

转换通用字符名并进行线拼接后,结果会是

R"X(Please no?)X"

这是一个有效的原始字符串。根据 2.5.3,“在原始字符串的初始和最终双引号字符之间,在阶段 1 和 2 中执行的任何转换都将被还原”:

R"\u0058(Please no?)\u0058"

这仍然是一个有效的原始字符串。

流程真的是这样运作的吗?如果不是,必须更改多少才能使上述内容成为有效的原始字符串?

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:

    不,流程不是这样运作的。

    第 2.3 节第 2 段:

    ... 如果在 c-char-sequences-char-sequencer 之外的通用字符名的十六进制值字符或字符串文字的 -char-sequence 对应于控制字符...或基本源字符集中的字符,程序格式错误。

    所以你的程序格式不正确。一些编译器可能会选择以您指定的方式解析通用字符名称,但这将是一个非标准扩展。

    除此之外,你做对了。如果你写:

    R\
    "\u0058(Please no?)\u0058"
    

    \u0058 将被还原。

    【讨论】:

      猜你喜欢
      • 2019-11-04
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-16
      • 2016-06-24
      相关资源
      最近更新 更多