大家好呀,我是灰灰,今天咱们来聊聊C++里那个让代码变优雅的神器——Lambda表达式!它就像你随叫随到的代码小秘书,能随时随地创建临时函数,彻底告别写一堆函数对象的烦恼!准备好升级你的代码美学了吗?🚀
一、Lambda基础:为什么需要它?
1.1 传统方式的痛点
假设你要给vector
排序,但需要自定义比较规则:
// 传统写法:定义函数对象
struct Compare {
bool operator()(int a, int b) {
return a > b; // 降序排序
}
};
vector<int> nums = {
3,1,4,2};
sort(nums.begin(), nums.end(), Compare());
缺点:要单独写个类,代码分散,可读性差!
1.2 Lambda的救场
vector<int> nums = {
3,1,4,2};
sort(nums.begin(), nums.end(), [](int a, int b) {
return a > b; // 降序排序
});
优势:
- 🚀 代码紧凑,逻辑一目了然
- 🎯 无需定义额外函数/类
- 🔥 支持捕获上下文变量
二、Lambda语法全解析
2.1 Lambda的"身份证"
完整Lambda表达式结构:
[捕获列表] (参数列表) mutable(可选) 异常属性(可选) -> 返回类型(可选) {
// 函数体
}
2.2 核心部件拆解
(1) 捕获列表:决定Lambda能访问哪些外部变量
int base = 100;
auto lambda = [base](int x) {
return x + base; // 捕获外部base
};
cout << lambda(5); // 输出105
(2) 参数列表:和普通函数参数一样
auto print = [