好问题!下面我会教你在 C++ 中 如何在 main()
函数中正确编写和使用匿名函数(Lambda 表达式),并配上多个例子,帮助你全面掌握它的写法和用法。
✅ 基本写法
最基础的 Lambda 表达式:
auto 函数名 = [](参数列表) -> 返回类型 {
// 函数体
};
在 main()
中定义和使用:
#include <iostream>
using namespace std;
int main() {
// 定义一个 Lambda 表达式(匿名函数)
auto sayHello = []() {
cout << "Hello from Lambda!" << endl;
};
// 调用它
sayHello(); // 输出:Hello from Lambda!
return 0;
}
✅ 带参数和返回值的 Lambda
#include <iostream>
using namespace std;
int main() {
// 定义带参数和返回值的 Lambda
auto add = [](int a, int b) -> int {
return a + b;
};
cout << "3 + 4 = " << add(3, 4) << endl; // 输出:3 + 4 = 7
return 0;
}
🔹 注意:
-> int
是可选的,如果编译器能自动推导类型,也可以省略。
✅ 带捕获外部变量的 Lambda
#include <iostream>
using namespace std;
int main() {
int factor = 3;
// 捕获 factor(值捕获)
auto multiply = [factor](int x) {
return x * factor;
};
cout << multiply(5) << endl; // 输出:15
return 0;
}
捕获方式 | 写法 | 说明 |
---|---|---|
值捕获 | [=] 或 [x] | 复制外部变量的当前值 |
引用捕获 | [&] 或 [&x] | 捕获引用,可修改原变量 |
✅ 立即执行的 Lambda(IIFE)
#include <iostream>
using namespace std;
int main() {
// 定义后立即调用
int result = [](int a, int b) {
return a * b;
}(6, 7); // 直接传入参数
cout << result << endl; // 输出:42
return 0;
}
✅ 总结用法速查表
用法类型 | 示例 |
---|---|
最简单 | [](){ ... } |
带参数 | [](int x){ return x * x; } |
带返回类型 | [](int x)->int { return x + 1; } |
捕获外部变量值 | [x]() { return x + 1; } |
捕获引用 | [&x]() { x += 10; } |
立即执行 | [](int x, int y){ return x + y; }(3, 4); |
❓适用场景
-
你需要在
main()
或某个函数内部定义一个短小、只用一次的函数逻辑 -
不想为一个小功能写成全局函数(如
bool isEven(int x)
之类) -
搭配
STL
算法函数使用(如sort
,for_each
,count_if
等)