Lambda 表达式
今天在看题解的时候,发现了一个有意思的写法,就是在函数内直接定义一个类似函数的东西,了解了一下其实是 c++ 11 引入的 Lambda 表达式。
Lambda 表达式
ISO C++ 11 标准的一大亮点是引入 Lambda 表达式。基本语法如下:
[capture list] (parameter list) -> return type { function body }
其中“[ ]”是捕获列表,可以为空,
[=]
按值的方式捕获所有变量,
[&]
按引用的方式捕获所有变量.
C++中,一个 lambda 表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。它与普通函数不同的是,lambda 必须使用尾置返回来指定返回类型。
例如调用 <algorithm>
中的 std::sort,ISO C++ 98 的写法是要先写一个compare函数:
bool cmp(int& a,int& b) 2{ 3 return a>b; 4}
然而,用 ISO C++ 11 标准新增的Lambda表达式,可以这么写:
sort(a,a+n,[](int a,int b){return a>b;});//降序排序
这样一来,代码明显简洁多了。
由于Lambda的类型是单一的,不能通过类型名来显式声明对应的对象,但可以利用auto关键字和类型推导:
auto f=[](int a,int b){return a>b;};
和其它语言的一个较明显的区别是 Lambda 和 C++ 的类型系统结合使用,如:
auto f=[x](int a,int b){return a>x;};//x被捕获复制
int x=0, y=1;
auto g=[&](int x){return ++y;};//y被捕获引用,调用g后会修改y,需要注意y的生存期
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】