当前位置: 首页 > news >正文

Lambda 表达式

一、Lambda 是什么

一句话:

Lambda 表达式 = 轻量函数(匿名函数)

不需要声明名字、不需要单独写函数体,直接在代码里用。

二、C++ Lambda 基本格式

C++ 最完整语法:

[capture](parameter_list) mutable noexcept -> return_type { body }
最常见精简格式:

[&](int x){ return x + 1; }
三、参数说明

部分含义
[capture]捕获外部变量
(parameter_list)参数列表
mutable允许修改捕获变量
return_type返回类型
{ body }实现代码

四、捕获(capture)的写法重点

捕获方式决定 Lambda 能否访问外部变量

例1:按值捕获

int a = 10;
auto f = [a]() { return a + 1; };
例2:按引用捕获

int a = 10;
auto f = [&a]() { a++; };
f();
执行后a == 11

例3:全部按值捕获

[=]() { ... }
例4:全部按引用捕获

[&]() { ... }
例5:混合捕获

[=,&x](){ ... }
🧰五、典型使用场景

① 线程回调 / 异步执行

std::thread t([]{
printf("worker\n");
});
t.join();
② STL 回调(最常用)

std::vector<int> v{1,2,3,4};
std::for_each(v.begin(), v.end(), [](int x){
std::cout << x << " ";
});
③ 排序自定义

std::sort(v.begin(), v.end(),
[](int a, int b){ return a > b; });
🔧六、底层实现

C++ Lambda 本质是:

编译器生成一个匿名类(仿函数 functor)

int a = 10;
auto f = [a]() { return a+1; };
等价于:

struct _Lambda {
int a;
int operator()() const {
return a+1;
}
};

所以:

  • 捕获变量 → 编译器生成成员变量

  • 调用 → 通过operator()执行

这一点和std::function/ function pointer 不一样。

🚩七、常见坑

❗ 1. 捕获值不会更新原变量

int a = 10;
auto f = [a](){ return a++; };
f();
printf("%d\n", a); // 输出 10(不会变)

需要引用:

auto f = [&a](){ a++; };
❗ 2. 捕获 this
类内使用很常见:

auto f = [this]() { this->run(); };
🚀八、和函数指针对比

函数指针Lambda
是否捕获外部变量❌ 不行✔ 可以
创建方式需要函数名无名即可
内联优化一般
易用性
http://www.jsqmd.com/news/270038/

相关文章:

  • 【毕业设计】基于python-CNN卷积神经网络对不同柑橘病变识别
  • C++编程从新手到高手的成长之路
  • 计算机深度学习毕设实战-基于python-CNN人工智能卷积神经网络对不同柑橘病变识别
  • Transformer之后,AI编程未来趋势会向哪里发展?AI应用架构师的思考
  • 【毕业设计】基于python-CNN深度学习卷积神经网络的不同衣服颜色识别
  • A2O MAY斩获中国MBIA行业盛典新人奖 达成全球新人奖四冠王
  • 学习Java41天
  • LeeCode_19 删除链表的倒数第n个节点
  • 27考研记录数据结构以及一元函数微分学的学习记录
  • Win11怎么关闭自动更新_Win11禁用系统更新详细步骤,禁止windows系统更新的软件工具
  • 异地恋不慌!Like_Girl 情侣纪念站可以用cpolar把爱意存进云端随时看
  • Flutter for OpenHarmony移动数据使用监管助手App实战 - 帮助实现
  • 深度学习毕设项目:基于python-CNN机器学习卷积神经网络的不同衣服颜色识别
  • 【课程设计/毕业设计】基于python-CNN机器学习卷积神经网络对不同柑橘病变识别
  • PDF Eraser Pro 2.0 PDF Eraser:支持文本 图像精准擦除,可添加文字图片,适配办公、学习等 PDF 轻编辑场景
  • 【课程设计/毕业设计】基于深度学习python-CNN卷积神经网络的不同衣服颜色识别
  • Flutter入门:打包
  • RHCSA(2)
  • 深度学习毕设选题推荐:基于python-CNN卷积神经网络人工智能的不同衣服颜色识别
  • 2026最新版的小程序公司十大榜单排名!哪家更受欢迎呢? - 企业数字化改造和转型
  • 微信小程序要怎么做?哪家公司可以做?2026最全教程分享 - 企业数字化改造和转型
  • Java语言提供了八种基本类型。六种数字类型【函数艾弗森】
  • 微软运行库合集2026电脑版 - 一键安装缺失运行库 高效快速
  • 深度学习计算机毕设之基于python-CNN卷积神经网络人工智能对不同柑橘病变识别
  • springboot非物质文化遗产再创新系统
  • Cardano:构建在科学严谨性上的下一代区块链生态系统
  • RWA:打通现实与数字世界的万亿美元资产桥梁
  • 基于 YOLOv26 的机场航拍小目标检测系统:技术详解与模型原理
  • 2026年最新版小程序开发公司TOP排名:哪家才是首选? - 企业数字化改造和转型
  • springboot非遗文化传承与推广平台管理系统