lambda表达式如何使用,请举例详细说明
时间: 2024-12-12 16:22:13 浏览: 15
Lambda表达式是C++11引入的一种简洁的匿名函数形式,用于创建小型、简短的函数对象。它们通常用于函数式编程风格,可以在需要函数的地方直接定义并传递给其他函数。Lambda表达式的语法如下:
```cpp
[capture-list] (parameters) -> return-type { function-body }
```
这里各部分含义如下:
- `capture-list`:捕获列表,用于指定外部变量是否要捕获以及如何捕获。如果不需要捕获外部变量,则可以省略。
- `(parameters)`:参数列表,与普通函数相同,可以有零个或多个参数。
- `- > return-type`:返回类型,函数的返回值类型。
- `{ function-body }`:函数体,即实际执行的操作。
下面是一些使用lambda表达式的示例:
1. **无参数、无返回值的简单函数**:
```cpp
auto add = []() -> void { std::cout << "Adding numbers...\n"; };
add(); // 输出 "Adding numbers..."
```
2. **带参数和返回值的函数**:
```cpp
auto multiply = [](double x, double y) -> double { return x * y; };
std::cout << multiply(2.0, 3.0) << std::endl; // 输出 "6"
```
3. **捕获外部变量**:
```cpp
int num = 5;
auto printNum = [num](void) { std::cout << num << "\n"; };
printNum(); // 输出 "5",num被按值捕获
```
或者按引用捕获:
```cpp
auto printNumRef = [&num](void) { std::cout << num << "\n"; };
num = 10; // 修改num值不会影响printNumRef的结果
printNumRef(); // 输出 "10"
```
4. **函数对象作为参数**:
```cpp
std::sort(std::begin(numbers), std::end(numbers), [](int a, int b) -> bool { return a < b; });
```
阅读全文