让我们考虑以下来自 C++11 标准(准确地说是 N3376 草案)的引用:
(2.14.8.5)
如果 L 是用户定义的字符串文字,则令 str 为不带 ud-suffix 的文字,令 len 为 str 中的代码单元数(即,其长度不包括终止空字符)。文字 L 被视为形式的调用
operator "" X (str , len )
而对于所有其他类型的用户定义文字(浮点、整数、字符),即使文字本身作为字符串传递,长度也永远不会传递。例如:
42_zzz; // calls operator "" _zzz("42") and not operator "" _zzz("42", 2)
为什么字符串和非字符串用户定义文字之间存在这种区别?或者我应该说,为什么实现为 UD 字符串文字传递 len?与其他文字的情况一样,长度可以通过空终止来推断。我错过了什么?