Functors(函数对象)似乎更有效率,因为编译器可以更容易地将它们内联,并且它们在参数化方面表现更好。那么,何时应该使用普通的函数而不是函数对象呢?
Functors(函数对象)似乎更有效率,因为编译器可以更容易地将它们内联,并且它们在参数化方面表现更好。那么,何时应该使用普通的函数而不是函数对象呢?
函数支持分布式重载,而函数对象则不行。您必须在函数对象内定义所有的重载;您可以在任何地方添加新的函数重载。
函数支持ADL(参数相关查找),允许在与参数类型相关联的命名空间中进行重载。而函数对象不支持。
函数指针是一种类型擦除后的状态无关函数对象,它是一个POD(普通数据类型),正如无状态lambda表达式转换为函数指针一样。这些特性(POD、无状态、类型擦除)非常有用。
[]{}
转换为void(*)()
--这是一种"类型擦除",因为我们忘记了我们正在做什么确切的操作,只记得"我们可以用()
调用它。它能够"擦除"的内容非常有限。我确实是指"有点"而不是"实际上"。为了更清晰明了,进行了编辑。 - Yakk - Adam Nevraumont