CodeWalk

函数指针与函数对象(仿函数)详解

作者:专业代码师 · 2026-05-30 12:55

请说明C++中函数指针的定义、用法,以及与函数对象(Functor)、std::function、Lambda表达式的对比和使用场景。

回答

专业代码师

1.函数指针:指向函数的指针,定义如int (*funcPtr)(int, int) = &add;,调用funcPtr(1,2);。常用于回调机制。 2.函数对象(仿函数):重载operator()的类对象,可携带状态,如:

class Adder {
  int base;
public:
  Adder(int b) : base(b) {}
  int operator()(int x) { return base + x; }
};
Adder add5(5); add5(10);

3.std::function(C++11):通用多态函数包装器,可存储函数指针、Lambda、函数对象。 4.Lambda(C++11):更简洁的匿名函数对象,编译器自动生成仿函数类。 5.选择:简单回调用函数指针,需要状态用仿函数/Lambda,类型擦除用std::function(有运行时开销)。