【基础知识】仿函数与匿名函数对比
C++底层机制推荐阅读
【C++基础知识】深入剖析C和C++在内存分配上的区别
【底层机制】【C++】vector 为什么等到满了才扩容而不是提前扩容?
【底层机制】malloc 在实现时为什么要对大小内存采取不同策略?
【底层机制】剖析 brk 和 sbrk的底层原理
【底层机制】为什么栈的内存分配比堆快?
【底层机制】右值引用是什么?为什么要引入右值引用?
【底层机制】auto 关键字的底层实现机制
【底层机制】std::unordered_map 扩容机制
【底层机制】稀疏文件–是什么、为什么、好在哪、实现机制
【底层机制】【编译器优化】RVO–返回值优化
仿函数与匿名函数对比
匿名函数(Lambda表达式)和仿函数(Function Objects/Functors)都是实现函数对象的机制,允许将行为像数据一样传递,是STL算法和现代C++异步编程的基石。
我将从多个维度对它们进行详细的对比和讲解。
1. 定义与语法
仿函数 (Functor)
仿函数本质上是一个重载了函数调用运算符 operator()
的类或结构体。
// 1. 定义一个仿函数类
struct GreaterThan {int threshold;// 构造函数,用于初始化状态GreaterThan(int t) : threshold(t) {}// 重载函数调用运算符bool operator()(int value) const {return value > threshold;}
};// 2. 使用
GreaterThan isGreaterThan5(5); // 创建仿函数对象,状态为5
bool result = isGreaterThan5(10); // 使用,结果为 true
// 在算法中直接使用临时对象
std::find_if(vec.begin(), vec.end(), GreaterThan(5));
匿名函数 (Lambda Expression)
Lambda是C++11引入的一种用于创建匿名函数对象的语法糖。编译器会自动将它转换为一个匿名的仿函数类。
// 语法原型:[捕获列表] (参数列表) -> 返回类型 { 函数体 }
int threshold = 5