为什么非下划线名称保留给 UDL 的实现而不是相反?
Why are non underscore names reserved to the implementation for UDL and not the other way around?
我知道这是一个旧功能,但请继续阅读 user defined literals 例如
return_t operator "" _a(long); // Literal operator for user-defined INTEGRAL literal
有人提醒我
the leading underscore is required. (Only the Standard Library is allowed to define literals without the underscore.) (A)
这似乎打破了模式,因为到目前为止,实现使用下划线名称并给我们留下了好的名称,例如保留给实现的名称是
- 包含双下划线
- 以下划线开头,后跟大写字母
此外,引用 (A) 在存在规则 (2) 的情况下有些危险。 为什么不一致?
在 user-defined 字面量的概念被添加到语言之前,所有标准字面量都使用不以下划线开头的序列,例如 123L
表示 long int
字面量.所以为了保持一致性,标准字面量获取的命名空间没有任何特殊前缀,UDLs通过使用_
.
来与它们区分开来
我知道这是一个旧功能,但请继续阅读 user defined literals 例如
return_t operator "" _a(long); // Literal operator for user-defined INTEGRAL literal
有人提醒我
the leading underscore is required. (Only the Standard Library is allowed to define literals without the underscore.) (A)
这似乎打破了模式,因为到目前为止,实现使用下划线名称并给我们留下了好的名称,例如保留给实现的名称是
- 包含双下划线
- 以下划线开头,后跟大写字母
此外,引用 (A) 在存在规则 (2) 的情况下有些危险。 为什么不一致?
在 user-defined 字面量的概念被添加到语言之前,所有标准字面量都使用不以下划线开头的序列,例如 123L
表示 long int
字面量.所以为了保持一致性,标准字面量获取的命名空间没有任何特殊前缀,UDLs通过使用_
.