16

今天我们发现用于乘法和除法的函子分别称为std::multipliesand std::divides,而不是例如 std::multiplystd::divide

考虑到这一点,至少可以说这是令人惊讶的,std::plus并且std::minus不是以相同的方式制定的。

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

4

1 回答 1

1

看起来这只不过是一个花絮:加号和减号甚至不是动词......

该名称本身不是C++14 原件:C++14 只是添加了<void>专业化,但类型化版本和所有其他<functional>头文件都存在于 C++98(甚至是 pre-iso),以及某些编码约定(作为动词、宾语作为形容词的接口……)还没有很好地建立起来。

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

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

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

于 2014-03-28T22:00:14.057 回答