C++ Lambda表达式怎么写_C++11匿名函数语法与捕获列表详解


Lambda表达式是C++11中定义匿名函数的简洁方式,基本语法为[捕获列表](参数列表) mutable 异常属性 -> 返回类型 {函数体},其中捕获列表和函数体必需;捕获列表可按值[x]或按引用[&x]捕获外部变量,也可使用隐式[=]或[&]捕获所有变量,支持混合捕获如[&, x];按值捕获的变量默认只读,加mutable可修改其副本而不影响外部;返回类型通常可自动推导,若函数体复杂需显式声明;常用于STL算法如sort的比较函数或封装回调函数,正确使用能提升代码可读性与效率。

c++ lambda表达式怎么写_c++11匿名函数语法与捕获列表详解

在C++11中,Lambda表达式是一种定义匿名函数的简洁方式,常用于需要传递函数对象的场合,比如STL算法或回调函数。它让代码更紧凑、可读性更强,尤其适合短小逻辑的内联实现。

基本语法结构

Lambda表达式的完整语法如下:

[捕获列表] (参数列表) mutable 异常属性 -> 返回类型 { 函数体 }

其中,只有捕获列表函数体是必需的,其余部分可以省略。编译器通常能自动推导返回类型,因此最常见的写法是:

[capture](parameters) { body }

例如:

稿定抠图 稿定抠图

AI自动消除图片背景

稿定抠图 80 查看详情 稿定抠图
auto add = [](int a, int b) {
    return a + b;
};
int result = add(3, 4); // result = 7

捕获列表详解

捕获列表决定Lambda如何访问外部作用域中的变量。它可以按值、按引用捕获,也可以混合使用。

按值捕获 [x]:将变量x的副本传入Lambda,内部修改不会影响外部。

int x = 10;
auto f = [x]() { 
    std::cout << x << std::endl; 
};
x = 20;
f(); // 输出 10,因为捕获的是副本

按引用捕获 [&x]:Lambda内部操作的是原始变量,修改会影响外部。

int x = 10;
auto f = [&x]() { 
    x = 100; 
};
f();
std::cout << x; // 输出 100

隐式捕获

  • [=]:按值捕获所有使用的外部变量
  • [&]:按引用捕获所有使用的外部变量

例如:

int a = 1, b = 2;
auto sum = [=]() { return a + b; };     // 按值捕获 a 和 b
auto incr = [&]() { ++a; ++b; };        // 按引用修改 a 和 b

混合捕获:可以组合使用,比如默认按引用,但某个变量按值。

int x = 10, y = 20;
auto f = [&, x]() {     // y 按引用,x 按值
    std::cout << x + y;
};

注意:不能重复捕获同一个变量,如 [x, x] 是错误的。

mutable关键字与值捕获的修改

默认情况下,按值捕获的变量在Lambda中是只读的(编译器生成的函数调用运算符为const)。如果想修改它们,需加上mutable关键字。

int x = 5;
auto f = [x]() mutable {
    x += 10;
    std::cout << x << std::endl;
};
f();   // 输出 15
std::cout << x; // x 仍是 5,外部未变

加了mutable后,虽然能修改副本,但不影响原变量。

返回类型推导

如果函数体只有一个return语句,编译器能自动推导返回类型。否则需要显式声明。

// 自动推导
auto square = [](int n) { return n * n; };
<p>// 显式指定返回类型
auto divide = [](double a, double b) -> double {
if (b != 0) return a / b;
return 0;
};

实际应用场景

Lambda最常见于STL算法中:

std::vector<int> nums = {5, 2, 8, 1, 9};
std::sort(nums.begin(), nums.end(), [](int a, int b) {
    return a > b; // 降序排序
});

也适用于封装回调:

std::function<void()> callback;
<p>int times = 0;
callback = [&times]() {
++times;
std::cout << "Called " << times << " times\n";
};</p><p>callback(); // Called 1 times
callback(); // Called 2 times

基本上就这些。掌握捕获方式和基本结构,就能写出清晰高效的Lambda表达式。关键是理解值与引用的区别,避免悬空引用或意外修改。

以上就是C++ Lambda表达式怎么写_C++11匿名函数语法与捕获列表详解的详细内容,更多请关注其它相关文章!


# 是一种  # 网站优化关键词怎么设定  # 演讲网站建设素材库  # 小红书可以做seo  # seo的地图制作视频  # 汕头时时彩网站建设  # 企业营销方案推广  # 游戏网站推广链接怎么弄  # 山东网上推广网站官网  # 店铺设计有哪些网站推广  # 福建网站建设  # 就能  # 隐式  # 回调函数  # 复用  # 什么用  # 运算符  # 有什么  # 抠图  # 的是  # 回调  # 代码可读性  # 作用域  # 区别  # c++ 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 百度地图离线地图无法加载如何解决 百度地图离线地图加载优化方法  《健康大兴》注册方法介绍  如何在mysql中比较InnoDB和MyISAM区别  Win10输入法不见了怎么办 Win10找回语言栏图标教程  漫蛙manwa漫画官网链接_漫蛙manwa最新可用网址推荐  荣耀盒子应用管理技巧  Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】  繁花漫画使用教程  如何自定义苹果手机铃声  蜻蜓FM如何设置移动流量播放  高德地图怎么查看未来行程规划_高德地图未来行程规划查看方法  利用Flexbox实现图片元素的二维布局:2x2网格排列指南  263企业邮箱如何设置邮件转发功能  精通VS Code多光标编辑以实现闪电般快速的修改  Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置  疯狂小鸟微信小游戏入口 疯狂小鸟网页版秒玩  大众点评了却看不到是怎么回事  Python中深度嵌套字典与列表的数据提取与条件过滤指南  《豆瓣》私信用户方法  Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频  鲨鱼剧场app金币获取方法  《i莞家》修改昵称方法  CSS动画如何实现图标旋转并放大_transform rotate scale @keyframes实现  微信注销后银行卡解绑了吗_微信注销后银行卡解绑状态  创客贴登录页面入口 创客贴网页版最新网址链接  如何在CSS中清除浮动解决背景颜色不包裹内容问题_clear after技巧  Win10显卡驱动安装失败怎么办 Win10使用DDU彻底卸载驱动【解决】  J*aScript桌面应用_Electron多进程架构实战  抖音猜你想搜能说明对方搜过吗  百度小说看书时如何翻页_百度小说手动翻页与自动翻页设置  淘口令快速解析技巧  苹果iPhone14ProMax如何新建AppleID_iPhone14ProMax新建AppleID具体流程  猫眼app抢票快还是小程序快  冬季去哪个城市旅游更有可能观测到极光  冬季去寒冷地区旅游,以下哪种做法有助于缓解冻伤  《磁力猫》最好用的磁官网  CSS如何在页面中引入重置样式_使用Normalize.css或Reset.css统一浏览器默认样式  如何在 WordPress 前端实现内容提交:古腾堡编辑器的替代方案与实践  使用AI在VS Code中将代码从一种语言翻译成另一种  《大润发优鲜》充值方法介绍  4399正版网页版入口高清直达链接  《波斯王子:失落的王冠》剑术大师打法攻略  手机自动关机是怎么回事?如何修复?手机异常关机的原因排查与修复技巧  处理含命名空间的XML文件 Power Query中的高级技巧  search中maxlength属性用法解析  微信如何设置字体大小_微信字体设置的阅读舒适  如何取消数字签名  《微信》视频号原创声明开启方法  Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析  在Dash应用中自定义HTML标题和网站图标 

 2025-12-19

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.