Lambda表达式是C++11引入的匿名函数,用于就地定义可调用对象,语法为capture->ret{body},支持值/引用捕获、自动类型推导,常配合STL算法使用,并可通过auto或std::function存储。
Lambda表达式是C++11引入的匿名函数,用于就地定义可调用对象,特别适合配合STL算法(如sort、find_if、for_each)使用。它语法紧凑,避免了单独写函数或仿函数的繁琐。
一个Lambda表达式形如:[capture](parameters) -> return_type { body }
其中:
捕获决定了Lambda能否以及如何使用外部变量:
[x]:值捕获局部变量x(副本,修改不影响原变量)[&
y]:引用捕获y(修改会影响原变量)[=]:默认值捕获所有在Lambda中使用的外部变量[&]:默认引用捕获所有在Lambda中使用的外部变量[=, &z]:默认值捕获,但z显式引用捕获(混合捕获)[this]:捕获当前对象的this指针,可在成员函数内访问成员示例:
int a = 10, b = 20;
auto f1 = [a](int x) { return x + a; }; // 值捕获a
auto f2 = [&b](int x) { b *= x; return b; }; // 引用捕获b
auto f3 = [=](int x) { return x + a + b; }; // 值捕获a和b
auto f4 = [&]() { b++; }; // 无参,引用捕获所有用到的变量这是Lambda最典型的使用场景:
#include#include #include int main() { std::vector
v = {3, 1, 4, 1, 5, 9}; // 按降序排序 std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; }); // 查找第一个大于3的元素 auto it = std::find_if(v.begin(), v.end(), [](int x) { return x > 3; }); // 遍历并打印平方值 std::for_each(v.begin(), v.end(), [](int x) { std::cout << x * x << " "; }); std::cout << "\n"; // 输出:81 25 16 1 1 9 return 0;}
存储Lambda:std::function与auto
Lambda有唯一且不可名状的类型,不能直接用普通类型声明变量,但有两种常用方式保存:
- 用
auto推导类型(最常用):适用于局部使用,类型由编译器确定- 用
std::function包装(需):支持类型擦除,可用于函数参数、容器、返回值等示例:
#includeauto lambda = [](int x) { return x * x; }; std::function
func = [](int x) { return x + 10; }; // 可作为参数传入 void process(std::function
f) { std::cout << f(5) << "\n"; // 输出15 } process(func); 注意事项与陷阱
使用Lambda时需注意:
- 值捕获的变量在Lambda创建时复制,之后即使原变量变化,Lambda内部仍用旧值
- 引用捕获的变量生命周期必须长于Lambda本身,否则会导致悬空引用(常见于返回局部Lambda)
- 捕获
this时,确保Lambda不会在对象销毁后被调用- 无捕获的Lambda可以隐式转换为函数指针,有捕获的则不行
不复杂但容易忽略
# go # ai # c++ # ios # stream # 作用域 # 隐式转换 # sort # 成员函数 # auto # 局部变量 # Lambda # 指针 # function # 对象 # this # 算法 # 默认值 # 这是 # 不可名状 # 第一个 # 隐式 # 遍历 # 适用于 # 可在 # 并可 # 在对
相关文章: 深圳网站制作案例,网页的相关名词有哪些? 建站主机与服务器功能差异如何区分? 网站制作费用多少钱,一个网站的运营,需要哪些费用? 建站之星如何配置系统实现高效建站? 实惠建站价格推荐:2025年高性价比自助建站套餐解析 公司网站制作价格怎么算,公司办个官网需要多少钱? 建站VPS能否同时实现高效与安全翻墙? 网站制作需要会哪些技术,建立一个网站要花费多少? 如何用景安虚拟主机手机版绑定域名建站? 广州营销型建站服务商推荐:技术优势与SEO优化解析 微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度? 如何续费美橙建站之星域名及服务? 西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站? 建站之星好吗?新手能否轻松上手建站? 建设网站制作价格,怎样建立自己的公司网站? 如何快速搭建高效香港服务器网站? 如何在腾讯云免费申请建站? 建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略 文字头像制作网站推荐软件,醒图能自动配文字吗? 高防服务器租用首荐平台,企业级优惠套餐快速部署 如何用wdcp快速搭建高效网站? 建站10G流量真的够用吗?如何应对访问高峰? 电脑免费海报制作网站推荐,招聘海报哪个网站多? 代购小票制作网站有哪些,购物小票的简要说明? 网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面? c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】 网站制作软件有哪些,制图软件有哪些? 浅析上传头像示例及其注意事项 韩国服务器如何优化跨境访问实现高效连接? 网站制作报价单模板图片,小松挖机官方网站报价? 制作网站的软件免费下载,免费制作app哪个平台好? 齐河建站公司:营销型网站建设与SEO优化双核驱动策略 PHP正则匹配日期和时间(时间戳转换)的实例代码 陕西网站制作公司有哪些,陕西凌云电器有限公司官网? Java解压缩zip - 解压缩多个文件或文件夹实例 如何通过西部数码建站助手快速创建专业网站? 枣阳网站制作,阳新火车站打的到仙岛湖多少钱? Swift中swift中的switch 语句 如何通过主机屋免费建站教程十分钟搭建网站? 建站中国官网:模板定制+SEO优化+建站流程一站式指南 如何通过商城免费建站系统源码自定义网站主题? 建站VPS选购需注意哪些关键参数? 香港服务器网站卡顿?如何解决网络延迟与负载问题? 建站之星如何助力网站排名飙升?揭秘高效技巧 如何在橙子建站上传落地页?操作指南详解 宝塔新建站点为何无法访问?如何排查? 网站制作难吗安全吗,做一个网站需要多久时间? 青岛网站设计制作公司,查询青岛招聘信息的网站有哪些? 网站制作壁纸教程视频,电脑壁纸网站? 网站制作企业,网站的banner和导航栏是指什么?
*请认真填写需求信息,我们会在24小时内与您取得联系。