根据 cppreference ,可以使用以下方式定义字面值。
现在阅读完这段文字后,我认为也有可能定义。
(请注意后缀
重载
CSomeClass operator ""s(const char* literal, size_t size);
现在阅读完这段文字后,我认为也有可能定义。
CSomeClass operator ""r(const char* literal, size_t size);
(请注意后缀
r
,而不是 s
。)重载
s
只会导致clang警告。warning: user-defined literal suffixes not starting with '_' are reserved [-Wuser-defined-literals]
我正在使用-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]
这对我来说似乎更不可靠。
为什么clang会发出这些警告/错误,我该如何使r
的ud后缀有效。
s
,用C++11编译r
吗?我猜我对一个有警告而另一个有错误感到困惑。我记得曾经要求""和标识符必须紧贴着,不能有空格。然后这个规定被放宽了。我不记得这是C++14还是C++11的DR。我会查一下,但我很确定他是针对C++11的DR。 - emsr