【问题标题】:Why are non underscore names reserved to the implementation for UDL and not the other way around?为什么为 UDL 的实现保留非下划线名称而不是相反?
【发布时间】:2017-01-29 00:02:01
【问题描述】:

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

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

我被提醒了

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

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

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

此外,引用 (A) 在存在规则 (2) 时有些危险。 那么为什么会出现不一致

【问题讨论】:

  • 这样我们就可以在标准库中获得“自然”的后缀,并让用户定义的后缀清晰可见。

标签: c++ user-defined-literals


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 2020-08-26
    • 2019-12-24
    • 2016-10-26
    • 1970-01-01
    相关资源
    最近更新 更多