STL功能 - 为什么?

Det*_*ant 11 c++ stl function-pointers function-object

在C++标准模板库中,有一个"功能"部分,其中许多类使其()运算符超载.

在C++中使用函数作为对象是否带来任何便利?

为什么我们不能只使用函数指针呢?任何例子?

Alo*_*ave 10

当然,人们总是可以使用函数指针而不是函数对象.但是函数对象提供了一些优于函数指针的优点,即:

  • 更好的性能:

最明显和最重要的优势之一是它们更有可能产生更好的性能.在函数对象的情况下,在编译时可以获得更多细节,以便编译器可以准确地确定并因此内联要调用的函数,这与函数指针的情况不同,其中指针的derefencing使得编译器难以确定实际函数这将被称为.

  • 功能对象是智能功能:

函数对象可以具有其他成员函数和属性.这意味着函数对象具有状态.实际上,由函数对象表示的相同函数可以同时具有不同的状态.这对于普通功能是不可能的.函数对象的另一个优点是,您可以在使用/调用它们之前在运行时初始化它们.

  • 通用编程的力量:

普通函数只有在签名不同时才能有不同的类型.但是,即使函数对象的签名相同,它们也可以具有不同的类型.实际上,函数对象定义的每个函数行为都有自己的类型.这是使用模板进行泛型编程的重大改进,因为可以将功能行为作为模板参数传递.