为什么非下划线名称保留给UDL的实现而不是相反?

时间:2017-01-29 00:02:01

标签: c++ user-defined-literals

我知道这是一个旧功能,但请阅读user defined literals,例如

return_t operator "" _a(long); // Literal operator for user-defined INTEGRAL literal

我被提醒

  

需要前导下划线。 (只允许标准库定义没有下划线的文字。)(A)

这似乎打破了模式,因为到目前为止,实现与下划线名称一起使用并留给我们好的,例如保留给实现的名称

  1. 包含双下划线
  2. 以下划线开头,后跟大写字母
  3. 此外,在存在规则(2)的情况下,引用(A)有些危险。 为什么不一致

1 个答案:

答案 0 :(得分:9)

在将用户定义的文字添加到语言之前,所有标准文字都使用不以下划线开头的序列,例如123L字面的long int。因此,为了保持一致性,标准文字获取没有任何特殊前缀的命名空间,并使用_将UDL与它们区分开来。