原始字符文字

时间:2015-05-27 11:39:38

标签: c++ c++11 character string-literals

我不知道我是否错过了什么或者它确实不存在。在C ++ 11标准中添加了Raw string literals

string s = "\\w\\\\\\w"; // I hope I got that right
string s = R"(\w\\\w)";  // I'm pretty sure I got that right

但我尝试使用原始字符文字失败了:

constexpr char bslash = R('\'); // error: missing terminating ' character
constexpr char bslash = R'(\)'; // error: 'R' was not declared in this scope

第二次尝试被认为是多角色常数!我发现使用类似于Raw字符文字的唯一方法是:

constexpr char slash = *R"(\)"; // All Ok.

但我不喜欢这种表示法(取消引用字符串文字以存储第一个元素的副本),因为它有点令人困惑。

嗯,问题是什么?

  • 原始字符文字是否存在? (我对他们一无所知,所以我几乎可以肯定他们不会这样做)
    • 如果它们存在:我应该如何编写Raw字符文字?
    • 如果它们不存在:为什么?是否有理由添加原始字符串文字但AVOID添加原始字符文字?

1 个答案:

答案 0 :(得分:5)

据我所知,在C ++ 11中引入原始字符串文字的提议是N2442 - Raw and Unicode String Literals; Unified Proposal。它基于 Beman Dawes N2146 - Raw String Literals (Revision 1),其中包含有关原始字符文字的部分

  

作为刻意的设计选择,原始字符(而不是字符串)   没有提出文字,因为没有明显的需要;逃逸   序列在性质上不会产生同样的实际问题   他们在字符串文字中做的文字。

     

赞成原始字符文字的论据是对称的   误差减少。知道允许原始字符串文字,   程序员可能会假设原始字符文字也是   可用。实际上,委员会成员无意中提到了这一点   阅读本文草稿时的假设。虽然由此而来   错误很容易修复,有人认为它更好   通过提供原始消除错误的可能性   首先是字符文字。

     

如果委员会愿意,我很乐意提供拟议的措辞   添加原始字符文字。

不幸的是,我在会议记录中找不到任何提及任何相关提案的讨论。虽然提到第一段的原因可能导致目前的情况。