c++的lambda
时间: 2024-04-21 13:19:12 浏览: 76
C++的lambda是一种匿名函数的形式,它可以在需要函数对象的地方使用,并且可以捕获上下文中的变量。Lambda表达式的语法如下:
```
[capture list](parameters) -> return_type {
// 函数体
}
```
其中,capture list是用来捕获上下文中的变量的列表,可以为空;parameters是函数的参数列表;return_type是函数的返回类型;函数体是具体的实现代码。
Lambda表达式的特点包括:
1. 可以在函数内部定义,不需要额外的函数声明。
2. 可以捕获上下文中的变量,包括按值捕获和按引用捕获。
3. 可以省略参数列表和返回类型,编译器会自动推导。
4. 可以作为函数对象使用,可以直接调用或者赋值给函数指针、函数对象等。
Lambda表达式的使用场景包括但不限于:
1. 作为函数对象传递给算法函数,如STL中的sort、for_each等。
2. 作为回调函数传递给其他函数或者类。
3. 在多线程编程中使用,作为线程的执行体。
相关问题
C++ lambda
C++ 的 lambda 表达式是一种匿名函数的表达式,可以在程序的任何地方使用。它可以帮助程序员更快速地实现和使用简单的函数,而不需要命名该函数。lambda 表达式通常用于需要在函数中传递简单函数的情况,例如在使用 STL 算法时。
Lambda 表达式的基本语法如下:
```
[capture](parameters) -> return-type { function-body }
```
- capture 表示 lambda 表达式能够访问的外部变量。
- parameters 表示 lambda 表达式的形参列表。
- return-type 表示 lambda 表达式的返回值类型。
- function-body 表示 lambda 表达式的函数体。
示例:
```
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> v = {1, 2, 3, 4, 5};
int sum = 0;
// 使用 lambda 表达式求和
for_each(v.begin(), v.end(), [&sum](int x) { sum += x; });
cout << "Sum = " << sum << endl;
return 0;
}
```
输出:
```
Sum = 15
```
在这个示例中,lambda 表达式的 capture 为引用(&),参数列表为 int x,返回类型为 void,函数体为 sum += x。lambda 表达式被传递给 STL 算法 for_each,用于将每个元素加到 sum 上。
阅读全文