标准预定义了哪些用户定义的文字?

| 我的问题听起来像是一个矛盾,但是我不知道除
user-defined-literal
之外还如何引用新的文字语法。
std::string operator \"\" s ( const char* str, size_t len )
{
   return std::string( str, len );
}

assert( \"foo\"s == \"bar\"s );
我记得曾经听说过用户定义的文字应该以“ 2”前缀开头。这意味着该库为我们定义了一些非前缀的文字。 该标准是否在标准库中提供了一些UDL? 如果是,那是什么?     
已邀请:
该语言已使用常规文字后缀,例如
1U
。 如果您要使用
U
作为用户定义的文字,那么建议将会变得模棱两可。 整数后缀:
u
U
l
L
ll
LL
浮动后缀:
f
F
l
L
    
标准库实际上没有定义任何用户定义的文字。我们可能期望复数,但是没有。 另一方面,也有建议再次删除它们 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3250.html 所以我们还不知道会发生什么。     
与@Matthieu的答案相反,FIDS在2.14.8 [lex.ext] p1下表示以下内容:   如果令牌同时与用户定义的文字和另一种文字匹配,则将其视为后者。   [示例:   123_km是用户定义的字面量,而12LL是整数的字面量。 —结束示例] 因此,即使您定义了这些文字,也将采用预定义的文字,并且没有歧义。     
没有标准的库组件对用户定义的文字提出要求。 @Bo提到了复杂的可能性。 另一个是位集:
template<char... Bits>
  inline constexpr std::bitset<sizeof...(Bits)>
  operator\"\" bits()
  {
    return std::bitset<sizeof...(Bits)>((char []){Bits..., \'\\0\'});
  }
我预计在即将到来的库TR2增强中将为各种库组件的文字运算符提供建议。 我预计后缀名称空间会发生一些冲突。您可以在名称空间中声明文字运算符,并防止多个模棱两可的定义,但是您不能在实际文字中按名称空间区分实际后缀。我们拭目以待。     

要回复问题请先登录注册