用户定义的字符串文字比。其他用户定义的文字

时间:2012-10-28 19:49:37

标签: c++ c++11 user-defined-literals

让我们考虑一下C ++ 11标准中的以下引用(准确地说是the N3376 draft):

  

(2.14.8.5)

     

如果L是用户定义的字符串文字,那么让str成为没有文字的文字   它的ud-su ffi x和len是str中代码单元的数量(即它的代码单元)   不包括终止空字符的长度)。文字L是   作为表格的调用处理

     operator "" X (str , len )

对于所有其他类型的用户定义文字(浮点,整数,字符),即使文本本身作为字符串传递,也不会传递长度。例如:

42_zzz; // calls operator "" _zzz("42") and not operator "" _zzz("42", 2)

为什么字符串和非字符串用户定义的文字有区别?或者我应该说,为什么实现为UD字符串文字传递len?与其他文字一样,长度可以通过空终止来推断。我错过了什么?

2 个答案:

答案 0 :(得分:8)

对于字符串文字,可以合理地设想在字符串的序列中嵌入空字符,例如"a\0b"。要允许实现使用整个字符串文字,即使存在嵌入的空字符,也需要知道文字的长度。用户定义的文字的其他形式不能包含嵌入的零字符。

答案 1 :(得分:6)

字符串在C / C ++中始终以null结尾,但它绝不意味着它们不能包含嵌入的\0字符,您可能有"1234\05678"并且当此字符串为空终止时,它包含一个额外的'\ 0`在里面。