lambda表达式

时间:2025-02-15 08:31:43 主机游戏

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表达式可以灵活地捕获外部作用域中的变量,并在需要时执行特定的操作。