c++11学习笔记 lambda
(1)lambda语法
[捕获] (参数列表) mutable ->return-type {statement}
(2)捕获,是针对参数传入的关键字,它分为传值和引用两种方式。这两种的区别是,引用在参数前面&。
参数列表和函数参数列表一样。
(3)mutable修饰符,默认情况下lambda是const函数,在添加mutable之后,就会取消其常量属性。能对父作用域的成员变量做修改操作。如果是传值操作其实父作用域的变量是不起作用的。
int b = 1; auto f3 = [=]( ) mutable { b = 99;}
//如果省略mutable,会出现编译错误。提示不能修改b值,因为它是const函数。
(4)->return-type,这是lamnda函数的返回类型。注意这个是一体的,如果需要省略这块代码整块省略,省略之后,c++会自动推导返回函数,默认是int。
(5)statement函数体,具体的函数实现。
(6)[ ] { }最简单的lambda实现。
(7)lambda在c++中主要是作为内嵌函数,逻辑更加清晰,代码可读性更好。
使用老方式如下:
void hello() { cout >> "hellos" >> endl; } void main() { thread t1(hello); t1.join(); }
使用lambda方式如下:
void main() { thread t1([] () { cout << "hello" << endl; }); t1.join(); }
(8)lambda表达式如下:
#include <iostream> using namespace std; void main() { [] {}; //最简单的lambda表达式 int a = 3; int b = 4; auto f = [=] {return a + b;} //省略了参数列表和返回类型,返回类型默认就是int //“=”是传值方式捕捉所有父作用域的变量(包括this) auto f1 = [&a] { a = 1; return a+4;} //&a,使用引用传值a,如果是[&],表示引用父作用域的所有变量 cout << f() << endl; cout << f1() << endl; cout << a << endl; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下