主要的好处是对函数对象(仿函数)的调用通常是可内联的,而对函数指针的调用通常不是(主要的例子是将C语言qsort与C++ 进行比较std::sort).对于非平凡的对象/比较器,C++应该杀死C的排序性能.
还有其他好处,例如,您可以在仿函数中绑定或存储状态,使用该函数不能执行原始函数.
编辑 道歉没有直接参考,但Scott Meyers在某些情况下声称改进了670%: qsort vs std :: sort的表现?
编辑2 与绩效说明的段落是这样的:
函数指针参数禁止内联的事实解释了一个观察结果,即长期的C程序员经常发现很难相信:C++的排序实际上总是让C的qsort在速度方面感到尴尬.当然,C++具有函数和类模板来实例化和看起来很滑稽的operator()函数,而C进行简单的函数调用,但所有C++"开销"都在编译过程中被吸收.在运行时,sort对其比较函数进行内联调用(假设比较函数已经内联声明,并且在编译期间它的主体可用),而qsort通过指针调用其比较函数.最终结果是排序运行得更快.在我对一百万双打矢量的测试中,它的速度提高了670%,但是不要接受我的话,自己尝试一下.很容易验证,当比较函数对象和实际函数作为算法参数时,有一个抽象奖励.
-Scott Meyers "Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library" - Item 46