Bootstrap

什么是 C++ 中的函数对象?它有什么特点?如何定义和使用函数对象?数对象与普通函数有什么区别?

  • 在 C++ 中,函数对象(Function Object)也被称为仿函数(Functor),是一种可以像函数一样被调用的对象,是一个类的对象,该类重载了函数调用运算符operator()。

函数对象的特点:

  • 与普通函数不同,函数对象可以拥有成员变量。这使得函数对象在某些情况下比普通函数更灵活。

  • 函数对象可以像普通变量一样作为参数传递给函数可。如sort可以接受一个函数对象来定义排序的规则。

函数对象的定义和使用:

class MyFunctor {
public:
    int operator()(int a, int b) {
        return a + b;
    }
};
  • 在这个例子中,MyFunctor类就是一个函数对象,因为它重载了operator()运算符。可以像调用函数一样使用这个对象:
MyFunctor f;
int result = f(3, 4);
  • 作为函数参数
void process(int a, int b, MyFunctor f) {
    int result = f(a, b);
}

int main() {
    MyFunctor f;
    process(3, 4, f);
    return 0;
}

函数对象与普通函数的区别:

  • 存储状态能力:函数对象可以拥有成员变量,因此可以存储状态。普通函数不能存储状态,每次调用时都是独立的,不会保留之前调用的信息。

  • 作为参数传递:函数对象和普通函数都可以作为参数传递给其他函数。但是,函数对象可以存储状态,并且可以在不同的调用之间保持状态。普通函数不能存储状态,每次调用时都是独立的。

  • 使用方式:函数对象是通过创建对象并调用其operator()运算符来使用的。普通函数是通过函数名和参数列表来调用的。

;