用户定义的文字,没有下划线

Uro*_*327 4 c++ user-defined-literals c++11 c++14

根据cppreference,可以使用定义文字

CSomeClass operator ""s(const char* literal, size_t size);
Run Code Online (Sandbox Code Playgroud)

在阅读完该段后,我认为应该也可以定义

CSomeClass operator ""r(const char* literal, size_t size);
Run Code Online (Sandbox Code Playgroud)

(注意rud后缀而不是s)

重载s只是给出了clang警告

warning: user-defined literal suffixes not starting with '_' are reserved [-Wuser-defined-literals]
Run Code Online (Sandbox Code Playgroud)

当我正在编译时,我无法理解-std=c++14.重载r给出了

error: invalid suffix on literal; C++11 requires a space between literal and identifier [-Wreserved-user-defined-literal]
warning: user-defined literal suffixes not starting with '_' are reserved; no literal will invoke this operator [-Wuser-defined-literals]
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎更不负责任.

为什么clang会发出这些警告/错误,以及如何使rud-suffix有效.

orl*_*rlp 9

用户定义的文字必须以下划线_开头:不以下划线开头的后缀保留给标准库提供的文字运算符.

  • @Uroc327 在`ud-suffix` 的定义中。 (2认同)
  • 如果未来的 C++ 添加了一个具有某种含义的“qqz”字面后缀,是否应该允许使用当今编译器的程序员编写代码,当在没有“qqz”的编译器上运行时,将定义“qqz”以与未来标准相同的方式? (2认同)