函数指针与函数对象(仿函数)详解
请说明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(有运行时开销)。