c++ 匿名函数Lambda
时间: 2024-10-11 19:03:51 浏览: 34
匿名函数,也称为lambda表达式,在C++11及以后的版本中引入,它是一种轻量级的、可以在运行时创建并直接传递给函数的函数对象。Lambda表达式的语法简洁,可以直接定义在需要它的位置,并可以捕获外部变量,甚至执行一些复杂的操作。它们通常用于处理回调函数、线程函数以及泛型算法等场景。
Lambda的基本结构如下:
```cpp
[capture-list] (parameter-list) -> return-type { function-body }
```
- `capture-list`(可选):指定如何捕获外部变量,例如`&`捕获所有,`=`仅捕获副本。
- `parameter-list`:函数参数列表,可以为空。
- `-> return-type`:返回类型,如果没有显式指定则默认为void。
- `{ function-body }`:函数体,实现了具体的逻辑。
下面是一个简单的例子:
```cpp
auto sum = [](int a, int b) -> int { return a + b; };
cout << sum(2, 3); // 输出5
```
相关问题
c++的匿名lambda函数
c 的匿名 lambda 函数是指在 C++11 中引入的 lambda 表达式的匿名函数。它可以在代码中直接定义和使用,而不需要为其分配一个函数名称。lambda 表达式的语法如下所示:
[捕获列表](参数列表) mutable noexcept -> 返回类型 { 函数体 }
其中,捕获列表用于指定 lambda 函数需要访问的外部变量;参数列表用于指定 lambda 函数的参数;mutable 关键字用于标记是否允许修改捕获的变量;noexcept 关键字用于指定 lambda 函数是否可能引发异常;返回类型用于指定 lambda 函数的返回值类型;函数体用于定义 lambda 函数的具体实现。
下面是一个示例代码,展示了如何定义和使用 lambda 匿名函数:
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int num = {4, 2, 3, 1};
// 对数组 num 中的元素进行升序排序
sort(num, num + 4, [](int x, int y) -> bool { return x < y; });
for (int n : num) {
cout << n << " ";
}
return 0;
}
输出结果为:1 2 3 4
c++ 11 的lambda 匿名函数 怎么解释和使用
C++11 引入了 lambda 表达式,使得 C++ 也能够像 Python、JavaScript 等语言一样支持匿名函数。lambda 表达式可以用来创建匿名函数对象,可以将其看作是一种语法糖,它可以简化函数对象的定义和使用。lambda 表达式的语法格式为:
```
[capture](parameters) -> return_type { body }
```
其中,`capture` 用于指定变量的捕获方式,可以为空或包含一个或多个变量,用于在函数体中访问捕获变量;`parameters` 是参数列表,用逗号分隔;`return_type` 是返回值类型,可以省略,编译器可以自动推导;`body` 是函数体,可以是一个表达式或一个代码块。
下面是一个简单的 lambda 表达式的例子:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec{ 1, 2, 3, 4, 5 };
int sum = 0;
std::for_each(vec.begin(), vec.end(), [&sum](int x) { sum += x; });
std::cout << "The sum is " << sum << std::endl;
return 0;
}
```
上面的例子中,`[&sum](int x) { sum += x; }` 定义了一个 lambda 表达式,用于将 `vector` 中的每个元素累加到 `sum` 变量中。在 lambda 表达式的中括号 `[...]` 中,使用 `&` 符号表示按引用捕获 `sum` 变量,这样在 lambda 函数体内就可以修改 `sum` 变量的值了。在 `for_each` 算法中,使用 lambda 表达式作为第三个参数,将其应用于 `vector` 中的每个元素。最终输出累加结果。
阅读全文