Lambda表达式是C++11中引入的一个非常强大的特性,它允许你在代码中直接定义匿名函数对象。Lambda表达式的基本语法如下:
```cpp
[捕获列表](参数列表) -> 返回类型 {函数体}
```
捕获列表:定义了lambda表达式如何捕获其外部作用域中的变量。可以是值捕获(如 `x` 或 `= x`)、引用捕获(如 `&x` 或 `&`)或不捕获(如 `[]`)。
参数列表:与普通函数的参数列表相同,可以有参数或没有参数。
返回类型:可以省略,编译器会根据函数体自动推断返回类型。
函数体:定义了Lambda的具体行为。
示例
```cpp
include
int main() {
auto add = [](int a, int b) -> int {
return a + b;
};
std::cout << "2 + 3 = " << add(2, 3) << std::endl;
return 0;
}
```
捕获列表的详细说明
值捕获
示例:`[a]` 表示 `a` 是值捕获,Lambda内部会使用 `a` 的副本。
示例:`[=]` 表示所有外部变量都是值捕获,Lambda内部会使用这些变量的副本。
引用捕获
示例:` [&a]` 表示 `a` 是引用捕获,Lambda内部会直接使用 `a` 的引用。
示例:`[&]` 表示所有外部变量都是引用捕获,Lambda内部会直接使用这些变量的引用。
混合捕获
示例:`[a, &b]` 表示 `a` 是值捕获,`b` 是引用捕获。
Lambda表达式的用途
Lambda表达式可以用于多种场景,例如:
作为回调函数传递给标准库算法,如 `std::find_if`。
作为参数传递给其他函数,如 `std::sort` 或 `std::transform`。
在lambda表达式中定义简短的函数,以便在需要时快速使用。
总结
Lambda表达式是C++11中引入的一个强大特性,它提供了一种简洁的方式来定义匿名函数对象。通过捕获列表、参数列表和函数体,Lambda表达式可以灵活地捕获外部作用域中的变量,并在需要时执行特定的操作。