原始字符文字

Pap*_*ter 5 c++ character string-literals c++11

我不知道我是否遗漏了某些内容,或者它确实不存在.在C++ 11标准中,添加了原始字符串文字:

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

但我尝试使用原始字符文字的所有尝试都失败了:

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

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

constexpr char slash = *R"(\)"; // All Ok.
Run Code Online (Sandbox Code Playgroud)

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

嗯,问题是什么?

  • Raw字符文字是否存在?(我没有发现任何关于他们的信息所以我几乎不确定他们没有
    • 如果它们存在:我应该如何编写Raw字符文字?
    • 如果它们不存在:为什么?是否有理由添加原始字符串文字但AVOID添加原始字符文字?

dyp*_*dyp 5

据我所知,在C ++ 11中引入原始字符串文字的建议是N2442-Raw和Unicode String Literals。统一提案。它是基于N2146 -原始字符串(修订版1)Beman Dawes拥有,其中包含一个大约部原始字符文字

作为有意的设计选择,由于没有明显的需求,因此不建议使用原始字符(而不是字符串)文字。转义序列在字符文字中所带来的实际问题与在字符串文字中所引起的实际问题不同。

支持原始字符文字的参数是对称性和减少错误。知道允许使用原始字符串文字,程序员可能会假设也可以使用原始字符文字。确实,一位委员会成员在阅读本文草案时无意中做出了这一假设。尽管由此产生的错误很容易修复,但有一个论点是最好通过首先提供原始字符文字来消除出现错误的可能性。

如果委员会希望添加原始字符文字,我将很乐意提供建议的措词。

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