c++ 11 的lambda 匿名函数 怎么解释和使用
时间: 2024-03-28 12:42:32 浏览: 64
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` 中的每个元素。最终输出累加结果。
阅读全文