我不知道我是否错过了什么或者它确实不存在。在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.
但我不喜欢这种表示法(取消引用字符串文字以存储第一个元素的副本),因为它有点令人困惑。
嗯,问题是什么?
答案 0 :(得分:5)
据我所知,在C ++ 11中引入原始字符串文字的提议是N2442 - Raw and Unicode String Literals; Unified Proposal。它基于 Beman Dawes 的N2146 - Raw String Literals (Revision 1),其中包含有关原始字符文字的部分:
作为刻意的设计选择,原始字符(而不是字符串) 没有提出文字,因为没有明显的需要;逃逸 序列在性质上不会产生同样的实际问题 他们在字符串文字中做的文字。
赞成原始字符文字的论据是对称的 误差减少。知道允许原始字符串文字, 程序员可能会假设原始字符文字也是 可用。实际上,委员会成员无意中提到了这一点 阅读本文草稿时的假设。虽然由此而来 错误很容易修复,有人认为它更好 通过提供原始消除错误的可能性 首先是字符文字。
如果委员会愿意,我很乐意提供拟议的措辞 添加原始字符文字。
不幸的是,我在会议记录中找不到任何提及任何相关提案的讨论。虽然提到第一段的原因可能导致目前的情况。