Lambda 表达式是 C++11 引入的一种匿名函数的方式,它允许你在需要函数的地方内联地定义函数,而无需单独命名函数
Lambda 表达式的基本语法如下:
[capture clause](parameters) -> return_type {
// 函数体
// 可以使用捕获列表中的变量
return expression; // 可选的返回语句
}
Lambda 表达式由以下部分组成:
- 捕获列表(Capture clause):用于捕获外部变量,在 Lambda 表达式中可以访问这些变量。捕获列表可以为空,也可以包含变量列表
[var1, var2, ...]。 - 参数列表(Parameters):与普通函数的参数列表类似,可以为空或包含参数列表
(param1, param2, ...)。 - 返回类型(Return type):Lambda 表达式可以自动推断返回类型,也可以显式指定返回类型
-> return_type。如果函数体只有一条返回语句,可以省略返回类型。 - 函数体(Body):Lambda 表达式的函数体,包含需要执行的代码。
Lambda 表达式最简单的案例是在需要一个小型函数或临时函数时直接使用它。以下是一个非常简单的例子,其中使用 Lambda 表达式来定义一个加法操作,并立即使用它来计算两个数的和。
示例:使用 Lambda 表达式进行加法
#include <iostream>
int main() {
// 定义一个简单的 Lambda 表达式进行加法
auto add = [](int a, int b) {
return a + b;
};
// 使用 Lambda 表达式计算两个数的和
int sum = add(10, 20);
std::cout << "Sum is: " << sum << std::endl;
return 0;
}
在这个例子中:
- 我们定义了一个名为
add的 Lambda 表达式,它接受两个整数参数,并返回它们的和。 - 然后,我们使用这个 Lambda 表达式来计算两个数字(10 和 20)的和,并将结果存储在变量
sum中。 - 最后,我们打印出这个和。
这个例子展示了 Lambda 表达式的基本用法:作为一种简洁而快速的方式来定义小型函数。
我们可以写一个例子,其中使用一个函数来找出两个数中的较大数,这个函数将接受一个 lambda 函数作为回调来比较这两个数。Lambda 函数将直接在函数调用时定义,完全是匿名的。
先回忆以下回调函数
#include <iostream>
// 函数,接受两个整数和一个比较的 lambda 函数
bool myCompare(int a, int b){
return a > b;
}
int getMax(int a, int b, bool(*compare)(int, int)) {
if (compare(a, b)) {
return a;
} else {
return b;
}
}
int main() {
int x = 10;
int y = 20;
// 回调函数
int max = getMax(x, y, myCompare);
std::cout << "The larger number is: " << max << std::endl;
return 0;
}
示例:使用匿名 Lambda 函数来返回两个数中的较大数
#include <iostream>
// 函数,接受两个整数和一个比较的 lambda 函数
int getMax(int a, int b, bool(*compare)(int, int)) {
if (compare(a, b)) {
return a;
} else {
return b;
}
}
int main() {
int x = 10;

文章介绍了C++11中Lambda表达式的概念、基本语法,包括捕获外部变量的方式、参数列表和返回类型,以及Lambda在回调函数和临时函数中的应用。同时对比了Lambda与内联函数的区别。
最低0.47元/天 解锁文章
2435

被折叠的 条评论
为什么被折叠?



