什么时候应该在C++中使用函数而不是函子?

nil*_*cit 7 c++ c++11

由于编译器更容易内联函数,因此函数显然更有效,并且它们在参数化方面的工作效果更好.什么时候应该使用普通的旧函数而不是函子?

Yak*_*ont 15

函数支持分布式覆盖.函数没有.您必须在其自身内定义Functor的所有重载; 您可以在任何地方添加函数的新重载.

函数支持ADL(依赖于参数的查找),允许在参数类型关联的命名空间中进行重载.函数没有.

函数指针(类型)是一种类型擦除的无状态函子,它是一个POD,正如无状态lambdas如何转换成它一样.这些特征(POD,无状态,类型擦除)很有用.

  • @TheSombreroKid首先,我在讨论函数指针,而不是成员函数指针(这是一个不同的指针).把`[] {}`转换成'void(*)()` - 这是一种"类型擦除",因为我们忘记了我们正在做的确切操作,只记得"我们可以称之为"用`()`.它的"擦除"是非常有限的.我的意思是"有点"而不是"实际".编辑清楚. (2认同)