Lambda函数
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 表达式的类型
当你定义一个 Lambda 表达式时,编译器会为该表达式生成一个隐式的类,这个类的类型是唯一的,且无法直接引用。
每个 Lambda 表达式的类型都是不同的,即使它们的内容完全相同。
示例:
auto lambda1 = [](int x) { return x + 1; };
auto lambda2 = [](int x) { return x + 1; };
// lambda1 和 lambda2 是不同的类型
操作符()
生成的 Lambda 类型会定义一个 operator(),使其可以像函数一样被调用。这个调用操作符可以接受参数并返回结果。
示例:
auto lambda = [](int a, int b) { return a + b; };
int result = lambda(3, 4); // 调用 lambda
总结
- Lambda 函数是 C++ 中用于创建匿名函数的特性,通常用于内联、简化代码。
- 它的强大之处在于可以捕获外部变量,支持按值或引用捕获,以及自动推导返回类型。
是的,Lambda 表达式在 C++ 中被视为一个独特的类型。具体来说,Lambda 表达式的类型是一个匿名的、不可命名的类,这个类定义了调用操作符operator()。以下是对 Lambda 的类型特性及其相关概念的详细解释:

浙公网安备 33010602011771号