【问题标题】:Is there any reason for std::multiplies and std::divides to be in third person? [closed]std::multiplies 和 std::divides 是否有任何理由成为第三人称? [关闭]
【发布时间】:2014-03-28 20:58:27
【问题描述】:

今天we discovered 用于乘法和除法的函子称为std::multipliesstd::divides,而不是例如std::multiplystd::divide

考虑到std::plusstd::minus 的表述方式不同,这至少可以说令人惊讶。

这种差异有什么特殊原因吗?

【问题讨论】:

  • 是否存在任何形式的std::addstd::subtract
  • 另外,我自己做了,因为委员会目前正在研究这个主题:gist.github.com/ThePhD/9842898
  • 请注意,这些在 C++14 中还没有引入,它们已经存在了很长时间。
  • 你为什么感到惊讶?它们现在都以s 结尾——除了negate,害群之马。这种方式更加一致;)
  • @ThePhD:void 特化是 C++14 中的新特性。选择这种技术是为了避免破坏使用这些模板的现有代码并避免引入新名称。鉴于这两个设计目标,void 专业化解决方案非常巧妙。

标签: c++ library-design


【解决方案1】:

看起来这不过是一个blooper:加号和减号甚至都不是动词......

名称本身不是 C++14 原件:C++14 只是添加了 <void> 特化,但类型化版本和所有其他 <functional> 标头内容来自 C++ 98(甚至是 pre-iso),并且某些编码约定(作为动词的功能,作为形容词的替代接口......)尚未完全建立。

C++14 所做的只是在现有定义中再添加一项功能,让现有代码继续按原样工作。它根本无法重新定义名称。

也就是说,还要考虑+ 符号并不总是在整个标准库中用于add:在std::strings 中它是连接,std::plus,如果应用于字符串,将它们连接起来。同样, * 通常用作“关闭”操作(想想boost::spirit)。

一个更合适的“从头开始”库很可能会将它们中性地称为crossdashstarslash,让提供相应操作的类在它们自己的名称中赋予它们一致的名称上下文

【讨论】:

    猜你喜欢
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2021-05-17
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2017-01-16
    相关资源
    最近更新 更多