news 2026/7/15 1:55:06

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/7/1 9:11:43

学习Java41天

抽象类 (Abstract Class)一、抽象类的基本概念1. 抽象方法定义&#xff1a;一个没有方法体的方法&#xff08;即只有方法声明&#xff0c;没有具体的实现&#xff09;。格式&#xff1a;javapublic abstract 返回值类型 方法名(参数列表);特点&#xff1a;使用 abstract 关键字…

作者头像 李华
网站建设 2026/7/1 2:22:21

异地恋不慌!Like_Girl 情侣纪念站可以用cpolar把爱意存进云端随时看

Like_Girl v5.2.0 作为专为情侣打造的纪念网站系统&#xff0c;核心功能贴合情侣日常记录需求&#xff1a;恋爱计时器精准到秒记录相伴时光&#xff0c;留言板可留存日常甜蜜对话&#xff0c;恋爱相册能收纳合照与心动瞬间&#xff0c;还有恋爱清单、点点滴滴等板块定格回忆&am…

作者头像 李华
网站建设 2026/7/4 22:34:25

Go 连接mysql添加时区

import (_ "github.com/gogf/gf/contrib/drivers/mysql/v2" )mysql:root:123456tcp(127.0.0.1:3306)/star?charsetutf8mb4&parseTimeTrue&locAsia%2FShanghai

作者头像 李华
网站建设 2026/7/1 9:11:49

【毕业设计】基于python-CNN卷积神经网络的柑橘成熟度识别

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

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

提示系统云原生架构设计:5大核心原则+3个大厂实战案例

提示系统云原生架构设计&#xff1a;5 大核心原则 3 个大厂实战案例 摘要/引言 在当今数字化时代&#xff0c;提示系统广泛应用于各类软件产品中&#xff0c;如搜索提示、智能客服提示等&#xff0c;旨在提升用户体验和操作效率。然而&#xff0c;随着业务规模的扩大和用户需求…

作者头像 李华