【发布时间】:2012-10-18 05:18:10
【问题描述】:
让我们考虑以下来自 C++11 标准的引用(准确地说是the N3376 draft):
(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?与其他文字的情况一样,长度可以通过空终止来推断。我错过了什么?
【问题讨论】:
-
可能与编码/字符集有关。在此之前的其他段落都有“[注意:序列 c1c2 ...ck 只能包含来自基本源字符集的字符。- end note ]”。
-
@Mat:但是其他编码或字符集的字符串仍然是空终止的,不是吗?
-
空终止是不够的。我猜“基本源字符集”不包括
\0。
标签: c++ c++11 user-defined-literals