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

标签 c++ user-defined-literals

我知道这是一个旧功能,但请继续阅读 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)

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

  1. 包含双下划线
  2. 以下划线开头,后跟大写字母

此外,引用 (A) 在存在规则 (2) 的情况下有些危险。 那么为什么不一致

最佳答案

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

关于c++ - 为什么非下划线名称保留给 UDL 的实现而不是相反?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41916254/

相关文章:

c++11 用户定义的物理属性单位文字

c++ - 来自 cppreference 的用户定义的 const char* 文字示例

c++ - 我可以模板化用户定义的文字吗?

c++ - 在编译时将 const char* 转换为 const char_type*

c++ - 编译时间一致的 char 类型哈希

c++ - TBB 并发无序映射导致段错误

c++ - 可变参数模板错误 : "parameter pack must be expanded"

c++ - 在 OS X 上编译 Linux 应用程序 - 找不到标准库 (cmath)

c++ - 默认情况下 std::ofstream 是否截断或追加?

c++ - 用于创建混合类的 MPL 工厂方法