news 2026/5/10 12:09:26

Lambda 表达式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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
是否捕获外部变量❌ 不行✔ 可以
创建方式需要函数名无名即可
内联优化一般
易用性
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 3:45:50

A2O MAY斩获中国MBIA行业盛典新人奖 达成全球新人奖四冠王

由A2O Entertainment&#xff08;以下简称A2O&#xff09;推出的全球女团 A2O MAY&#xff08;成员包括朱晨予 CHENYU、李诗洁 SHIJIE、曲唱 QUCHANG、陈佳仪 MICHE、陈佳辰 KAT&#xff09;在中国颁奖典礼上再添新人奖项&#xff0c;正式达成全球新人奖「四冠王」成绩。于17日…

作者头像 李华
网站建设 2026/5/4 12:47:35

【毕业设计】基于python-CNN卷积神经网络对不同柑橘病变识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/2 23:04:47

RWA:打通现实与数字世界的万亿美元资产桥梁

在区块链技术蓬勃发展的今天&#xff0c;一个关键趋势正悄然改变我们对资产所有权的认知&#xff1a;现实世界资产代币化。这一被称为RWA的赛道&#xff0c;旨在将房地产、债券、艺术品等传统资产引入区块链&#xff0c;实现数字化与代币化&#xff0c;构建连接现实与数字世界的…

作者头像 李华
网站建设 2026/5/7 20:49:58

MBA必备!10个降AI率工具高效推荐

MBA必备&#xff01;10个降AI率工具高效推荐 AI降重工具&#xff1a;MBA论文的高效护航者 在当前学术研究日益依赖人工智能技术的背景下&#xff0c;MBA学生在撰写论文时常常面临一个共同难题——如何有效降低AIGC率、去除AI痕迹&#xff0c;同时又不破坏文章的逻辑性和专业性。…

作者头像 李华