在 C++ 中,Lambda 表达式和函数对象(Function Objects,也称为仿函数/Functors) 都是可调用对象(Callable Objects)的实现方式,用于定义可被调用的行为。
1.函数对象
通过重载 operator() 运算符的类实例,可以像函数一样被调用。
// 定义函数对象类
struct Adder {
int base; // 状态
Adder(int n) : base(n) {}
// 重载函数调用运算符
int operator()(int x) const {
return base + x;
}
};
int main() {
Adder add5(5); // 创建函数对象
std::cout << add5(3); // 输出 8 (5+3)
Adder add10(10);
std::cout << add10(3); // 输出 13 (10+3)
}2. Lambda 表达式
基本语法:
[捕获列表](参数列表) -> 返回类型 { 函数体 }
示例:
int base = 5;
// 定义 lambda 表达式
auto add = [base](int x) {
return base + x;
};
std::cout << add(3); // 输出 8