是\ u0052 \ u0022启动原始字符串?

时间:2013-02-22 23:31:40

标签: c++ c++11

假设我们有以下内容:

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

转换通用字符名称并执行行拼接后,结果将为

R"X(Please no?)X"

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

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

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

这真的是这个过程的运作方式吗?如果没有,必须更改多少才能使上面的有效原始字符串?

1 个答案:

答案 0 :(得分:1)

不,这不是这个过程的工作方式。

第2.3节第2段:

  

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

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

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

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

\u0058将被还原。