我的问题听起来像是一个矛盾,但我不知道如何引用user-defined-literal
以外的新文字语法。
std::string operator "" s ( const char* str, size_t len )
{
return std::string( str, len );
}
assert( "foo"s == "bar"s );
我记得听说用户定义的文字应该以{{1}}前缀开头。这意味着图书馆为我们定义了一些非前缀文字。
标准是否在标准库中提供了一些UDL? 如果是的话,他们是什么?
答案 0 :(得分:6)
标准库实际上定义了 no 用户定义的文字。我们可能已经预料到了复数,但没有。
另一方面,还有建议再次删除它们
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3250.html
所以我们还不知道会发生什么。
答案 1 :(得分:5)
该语言已使用常规文字后缀,例如1U
。
如果您将U
用作用户定义的文字,那么这将是不明确的,因此建议。
整数后缀:u
,U
,l
,L
,ll
,LL
< / p>
浮动后缀:f
,F
,l
,L
答案 2 :(得分:2)
与@ Matthieu的答案相反,FIDS在2.14.8 [lex.ext]下面说了以下内容p1:
如果令牌与 user-defined-literal 和另一种文字类型相匹配,则将其视为后者。
[示例: 123_km 是用户定义的文字,但 12LL 是整数文字。 - 结束示例]
因此,即使您定义了这些文字,也会采用预定义的文字,并且没有歧义。
答案 3 :(得分:1)
没有标准库组件对用户定义的文字进行索赔。 @Bo提到复杂的可能性。
另一个是bitset:
template<char... Bits>
inline constexpr std::bitset<sizeof...(Bits)>
operator"" bits()
{
return std::bitset<sizeof...(Bits)>((char []){Bits..., '\0'});
}
我预测在即将到来的库TR2增强中会有各种库组件的文字运算符提议。
我预计会在后缀命名空间上发生一些冲突。您可以在命名空间中声明文字运算符并防止多个不明确的定义,但是您无法通过实际文字中的命名空间来区分实际后缀。我们会看到。