std :: multiplies和std :: divides是否有任何理由成为第三人称?

时间:2014-03-28 20:58:27

标签: c++ library-design

今天we discovered用于乘法和除法的仿函数分别称为std::multipliesstd::divides,而不是分别为std::multiplystd::divide

至少可以说这是令人惊讶的,因为std::plusstd::minus的制定方式不同。

是否存在差异的特殊原因?

1 个答案:

答案 0 :(得分:1)

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

名称本身不是 C ++ 14原件:C ++ 14只添加<void>专门化,但输入的版本和所有其他<functional>标题内容存在从C ++ 98(甚至pre-iso)开始,某些编码约定(作为动词的函数,作为形容词的作为子代接口的对象......)还没有很好地建立起来。

C ++ 14所做的只是为现有定义添加一个功能,让现有代码继续按原样运行。它根本无法重新定义名称。

也就是说,还要考虑{em> add 的整个标准库中并不总是使用+符号:在std::string中它是串联的,{{1如果应用于字符串,则连接它们。类似地,*通常用作“闭包”操作(想想std::plus)。

更合适的“从头开始”库很可能会将它们称为boost::spiritcrossdashstar中性,让提供相应操作的类在他们自己的背景下给他们一致的名字