c++ lambda 表达式
时间: 2025-05-25 17:07:07 浏览: 36
### C++ Lambda 表达式简介
C++11 引入了 lambda 表达式这一特性,使得开发者可以在需要函数的地方直接定义匿名函数对象,而无需单独声明函数。这种机制不仅简化了代码结构,还增强了程序的灵活性[^4]。
#### 基本语法
Lambda 表达式的通用形式如下:
```cpp
[capture](parameters) -> return_type { body }
```
- **`capture`**: 定义如何捕获外部作用域中的变量(按值、按引用或其他方式)。
- **`parameters`**: 函数参数列表,类似于普通函数。
- **`return_type`**: 可选部分,默认情况下编译器会推导返回类型。
- **`body`**: 函数体,包含具体的逻辑实现。
---
### 示例解析
以下是几个典型的 lambda 表达式使用场景及其对应的代码示例。
#### 1. 打印容器中的元素
通过 `std::for_each` 配合 lambda 表达式来遍历并打印向量中的数据。
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
// 使用 Lambda 表达式打印每个元素
for_each(vec.begin(), vec.end(), [](int x) {
cout << x << " ";
});
cout << endl;
return 0;
}
```
此代码展示了如何利用 lambda 表达式作为回调函数传递给标准库算法 `std::for_each`[^1]。
---
#### 2. 捕获局部变量
Lambda 表达式可以通过 `[ ]` 来捕获上下文中的变量。支持的方式有多种:按值 (`=`),按引用 (`&`) 或显式指定单个变量。
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int factor = 2;
vector<int> vec = {1, 2, 3, 4, 5};
// 按值捕获变量 'factor'
transform(vec.begin(), vec.end(), vec.begin(), [factor](int x) {
return x * factor;
});
for (auto num : vec) {
cout << num << " ";
}
cout << endl;
return 0;
}
```
在此示例中,lambda 表达式捕获了名为 `factor` 的局部变量,并将其用于计算新数组的值[^2]。
---
#### 3. 返回复杂类型的 lambda 表达式
当 lambda 表达式的返回值较为复杂时,可以显式指定其返回类型。
```cpp
#include <functional>
#include <iostream>
using namespace std;
int main() {
auto adder = [] (int a, int b) -> int {
return a + b;
};
cout << adder(3, 4) << endl; // 输出 7
return 0;
}
```
上述代码显示了一个简单的加法操作,其中指定了返回类型为整数型。
---
### 总结
Lambda 表达式极大地提高了 C++ 编程的便利性和可读性,尤其是在处理 STL 算法或者 GUI 应用开发时尤为有用。它们能够减少不必要的辅助函数定义,使代码更加紧凑高效。
阅读全文
相关推荐



















