C++ Lambda表达式与函数对象深度解析
📚 共计 30 章节
01
函数对象初探
什么是函数对象(仿函数)?为什么需要它?与普通函数的区别。
仿函数
基础
02
函数对象的本质
重载 operator() 的类,状态保持能力。
operator()
状态
03
标准库中的函数对象
std::plus, std::minus, std::greater, std::less 等。
标准库
内置仿函数
04
函数对象的实际应用
作为谓词(Predicate)用于 std::sort, std::find_if。
谓词
算法
05
函数对象的性能优势
内联优化,避免函数指针开销。
内联
性能
06
Lambda 表达式登场
C++11 引入的匿名函数对象,语法糖。
C++11
匿名函数
07
Lambda 基础语法
[捕获列表](参数列表) -> 返回类型 { 函数体 }。
语法
入门
08
捕获列表详解
值捕获 [=]、引用捕获 [&]、混合捕获、默认捕获模式。
捕获
引用
09
可变 Lambda
mutable 关键字,修改值捕获的副本。
mutable
修改
10
泛型 Lambda
C++14 引入,auto 参数类型推导。
C++14
泛型
11
Lambda 的返回类型推导
自动推导与尾置返回类型 -> decltype。
类型推导
decltype
12
Lambda 与 STL 算法
std::for_each, std::transform, std::remove_if 实战。
STL
算法实战
13
Lambda 与回调函数
替代函数指针和 std::function,简化异步编程。
回调
异步
14
Lambda 与多线程
std::thread 和 std::async 中的 Lambda 使用。
多线程
并发
15
Lambda 的捕获陷阱
悬空引用、生命周期问题、捕获 this 指针。
陷阱
生命周期
16
广义捕获(Init Capture)
C++14 引入,移动捕获和自定义捕获。
Init Capture
移动语义
17
函数对象 vs Lambda
何时用类,何时用 Lambda?设计哲学对比。
对比
设计
18
std::function 类型擦除
统一存储可调用对象,运行时多态。
std::function
类型擦除
19
std::bind 与占位符
参数绑定,与 Lambda 的对比。
std::bind
占位符
20
高阶函数
返回 Lambda 的函数,闭包工厂模式。
高阶函数
闭包工厂
21
递归 Lambda
C++14 中的泛型 Lambda 实现递归。
递归
泛型
22
Lambda 与 constexpr
C++17 起 Lambda 可在编译期求值。
constexpr
编译期
23
捕获 *this
C++17 引入,安全捕获对象副本。
*this
安全捕获
24
模板 Lambda
C++20 引入,显式模板参数列表。
C++20
模板
25
Lambda 与概念(Concepts)
C++20 约束 Lambda 参数类型。
Concepts
约束
26
函数对象的现代应用
策略模式、状态机、延迟计算。
设计模式
状态机
27
性能调优
Lambda 的编译期展开与内联,避免 std::function 开销。
内联展开
优化
28
调试技巧
如何查看 Lambda 类型?使用 decltype 和 typeid。
调试
decltype
29
常见错误与最佳实践
捕获过多、默认捕获模式的风险、可读性平衡。
最佳实践
陷阱
30
综合实战
用 Lambda 和函数对象实现一个简单的事件系统。
实战
事件系统