C++ 面试题
目录

C++ 中什么是函数对象 (function object)?

· 约 3 分钟读完 · 第 46 / 181 章

推荐答案

在C++中,函数对象(Function Object)是一个类对象,它重载了函数调用运算符 operator()。通过重载这个运算符,类的实例可以像函数一样被调用。函数对象通常用于STL算法中,作为回调函数或谓词。

本题详细解读

什么是函数对象?

函数对象是一个类对象,它通过重载 operator() 使得对象可以像函数一样被调用。这种对象通常用于需要传递函数作为参数的场景,例如STL算法中的 std::sort、std::for_each 等。

函数对象的优点

  1. 状态保持:函数对象可以拥有成员变量,因此可以在多次调用之间保持状态。
  2. 灵活性:函数对象可以像普通函数一样使用,也可以作为模板参数传递。
  3. 性能:函数对象通常比函数指针更高效,因为编译器可以更好地优化它们。

函数对象的使用场景

  1. STL算法:许多STL算法接受函数对象作为参数,例如 std::sort、std::transform 等。
  2. 回调函数:函数对象可以作为回调函数传递给其他函数或对象。
  3. 谓词:函数对象常用于谓词(Predicate),例如在 std::find_if 中。

示例代码

在这个例子中,GreaterThan 是一个函数对象,它用于在 std::find_if 中查找第一个大于给定阈值的元素。