搜索

pdf文档 Back to Basics: Lambda Expressions

175.89 KB 48 页 0 下载 58 浏览 0 评论 0 收藏
所属分类: 后端开发 / C++
语言 格式 评分
英语
.pdf
3
摘要
文档详细介绍了C++中的lambda表达式,包括其基本概念、组成部分(如捕获语句、参数列表、函数体)以及在不同版本中的变化。lambda表达式是一种匿名函数,可以捕获外部变量并生成函数对象。文档还讨论了C++20中的新特性,如对decltype的支持和gcc、MSVC对通用捕获的支持。此外,lambda表达式可以被赋值给std::function,并用于模板和容器中。
AI总结
### 文档总结:Lambda 表达式(C++) #### 1. **Lambda 表达式的定义与核心结构** - **Lambda 表达式**是一种在 C++ 中定义匿名函数的简洁方式,它在运行时生成一个函数对象(closure)。 - 核心结构包括: - **捕获子句**:用于捕获外部变量(可按值或引用捕获)。 - **参数列表**:定义 Lambda 的输入参数。 - **函数体**:包含执行的代码逻辑。 #### 2. **捕获机制** - **按值捕获**:捕获变量的副本,原变量的生命周期结束后,副本仍然有效。 - **按引用捕获**:捕获变量的引用,要求被捕获的变量在 Lambda 的生命周期内必须存在。 - **`mutable` 关键字**:允许 Lambda 在函数体内修改被捕获的变量。 #### 3. **Lambda 的类型与存储** - Lambda 表达式生成的函数对象类型通常由 `auto` 推导,称为“closure 类型”。 - Lambda 可以存储在 `std::function` 容器中,用于传递或存储函数对象。 #### 4. **Lambda 的优势** - **简洁性**:无需定义单独的函数,直接在需要的地方使用。 - **上下文捕获**:能够捕获外部变量,形成闭包。 - **支持泛型编程**:通过 `auto` 参数,支持泛型 Lambda 表达式。 #### 5. **示例应用** - **自定义比较函数**: ```cpp auto myLamb = [](const std::string &a, const std::string &b) { return a.size() < b.size(); }; std::map myMapB = { {"orange", 45}, {"apple", 95}, {"kiwi", 40}, {"grapefruit", 22} }; ``` - **捕获变量并执行操作**: ```cpp int main() { int x = 42; auto myLamb = [x]() { std::cout << "Hello from a lambda expression, value = " << x << std::endl; }; x = 7; myLamb(); // 输出 x 的值 } ``` #### 6. **编译器支持** - Lambda 表达式在 C++11 引入,C++20 完善语法。 - 目前,gcc 和 MSVC 支持泛型 Lambda 的 `capture`,但 clang 可能仍报错。 #### 7. **总结** Lambda 表达式是 C++ 中强大的工具,能够简化代码并支持灵活的函数操作。它通过捕获机制和闭包功能,实现了函数对象的动态行为,广泛应用于 STL 算法、线程和模板编程中。
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余 36 页请下载阅读 -
文档评分
请文明评论,理性发言.