C++ 中的 Lambda 函数
在C++11及以后版本中,Lambda函数(或称为匿名函数)是一种内联函数,可以在函数内部或任何其他地方定义,甚至可以立即传递给其他函数。
Lambda函数的语法更加灵活,允许捕获变量和处理复杂的行为,非常适合在需要简单函数的场景中使用。
语法
[capture](parameters) -> return_type {
// 函数体
}
- capture(捕获列表):指定 Lambda 函数可以捕获哪些变量。可以是
[]
(不捕获任何变量)、[&]
(捕获所有变量通过引用)、[=]
(捕获所有变量通过值)等。 - parameters(参数列表):与普通函数一样,定义传递给 Lambda 函数的参数。
- return_type(返回类型):指定返回值的类型(可以省略,编译器会自动推断)。
- 函数体:Lambda 函数的逻辑实现。
捕获列表的详细说明:
[ ]
:不捕获任何外部变量。[&]
:通过引用捕获外部变量,可以修改它们的值。[=]
:通过值捕获外部变量,捕获的是它们的拷贝。[&x, =y]
:对x
通过引用捕获,y
通过值捕获。
使用示例
-
基本 Lambda 表达式:
auto add = [](int x, int y) -> int { return x + y; }; std::cout << add(3, 4) << std::endl; // 输出 7
在这个例子中,定义了一个 Lambda 函数
add
,它接受两个整数并返回它们的和。 -
捕获外部变量:
int a = 5, b = 3; auto add = [a, b]() { return a + b; }; std::cout << add() << std::endl; // 输出 8
在这个例子中,外部变量
a
和b
被捕获并通过值传递给 Lambda 函数。 -
通过引用捕获:
int x = 10; auto modify = [&x]() { x += 5; }; modify(); std::cout << x << std::endl; // 输出 15
在这里,Lambda 函数通过引用捕获
x
,并在函数内部修改了它的值。
总结
- Lambda 函数是 C++ 中用于创建匿名函数的特性,通常用于内联、简化代码。
- 它的强大之处在于可以捕获外部变量,支持按值或引用捕获,以及自动推导返回类型。