新闻中心

c++如何使用lambda表达式_C++匿名函数与捕获变量示例

2025-11-15
浏览次数:
返回列表
C++中lambda表达式可定义匿名函数,用于算法回调等场景,语法为[捕获](参数)->返回类型{函数体},如[=]值捕获、[&]引用捕获,示例auto add=[ ](int a,int b){return a+b;}计算两数之和。

c++如何使用lambda表达式_c++匿名函数与捕获变量示例

在C++中,lambda表达式是一种定义匿名函数的简便方式,常用于需要传递函数对象的场景,比如算法中的比较、过滤或回调。它可以在代码中直接定义,无需单独命名函数,提升可读性和编码效率。

基本语法与简单示例

lambda表达式的语法结构如下:

[capture](parameters) -> return_type { function_body }

其中,捕获列表(capture)是可选的,参数列表和返回类型也可以省略(编译器能自动推导)。

例如,定义一个简单的lambda,计算两个数的和:

auto add = [](int a, int b) { return a + b; };
int result = add(3, 4); // result = 7

这里使用了空捕获列表 [],表示不捕获任何外部变量。

捕获外部变量的方式

lambda可以访问其定义作用域内的局部变量,通过捕获列表实现。常见捕获方式有以下几种:

  • [=]:值捕获,按值复制所有使用的外部变量
  • [&]:引用捕获,按引用访问外部变量
  • [var]:只按值捕获指定变量
  • [&var]:只按引用捕获指定变量
  • [this]:捕获当前对象的指针,用于类成员函数中

示例:使用值捕获修改局部变量

int x = 10;
auto f1 = [x]() { std::cout f1(); // 输出 10
// 在lambda内部无法修改x,除非使用 mutable

若需在lambda中修改值捕获的变量,需加上 mutable 关键字:

Reachout.ai Reachout.ai

一个AI驱动的视频开发平台,专为忙碌的企业家和销售团队打造

Reachout.ai 142 查看详情 Reachout.ai auto f2 = [x]() mutable { x += 5; std::cout f2(); // 输出 15,但原x仍为10

若用引用捕获,则可直接修改原变量:

auto f3 = [&x]() { x += 5; };
f3(); // x 变为 15

实际应用场景示例

lambda常用于STL算法中,比如 std::sortstd::find_if 等。

例如,对一个学生分数向量按降序排序:

std::vector scores = {85, 92, 78, 96, 88};
std::sort(scores.begin(), scores.end(), [](int a, int b) {
  return a > b;
});

又如,在容器中查找第一个大于90的元素:

auto it = std::find_if(scores.begin(), scores.end(), [](int score) {
  return score > 90;
});
if (it != scores.end()) {
  std::cout }

在类成员函数中,lambda也可捕获 this 来访问成员变量:

class Student {
public:
  void printInfo() const {
    auto printer = [this]() {
      std::cout     };
    printer();
  }
private:
  std::string name = "Tom";
  int age = 20;
};

基本上就这些。lambda让C++代码更简洁灵活,合理使用捕获方式是关键。

以上就是c++++如何使用lambda表达式_C++匿名函数与捕获变量示例的详细内容,更多请关注其它相关文章!


# 相关文章  # 信纸模板网站建设素材图  # 跨境服饰网站建设方案  # seo文章模型  # 郑州网络营销推广招商  # 营销推广的学问  # 佛山公司网站建设案例  # 西樵公司网站建设招聘  # 小池窖营销推广  # 宁海seo公司报价  # 自己学习做网站优化吗  # 中文网  # 编码  # 也可  # 第一个  # 是一种  # 回调  # 解决方法  # 重写  # 有什么  # 如何使用  # 作用域  # c++ 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容  Python中高效访问嵌套字典与列表中的键值对  照顾宝贝2小游戏点击立即在线玩  qq浏览器打开空白页怎么办 qq浏览器启动后显示白屏的解决教程  163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航  J*aScript打印功能_j*ascript输出控制  在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明  抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明  C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果  如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】  支付宝如何管理隐私设置_支付宝隐私保护的配置技巧  在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案  怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】  Composer的 archive 命令怎么用_快速打包你的PHP项目及其Composer依赖  使用CSS更改登录屏幕输入框中PNG图标颜色的策略与局限性  如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流  一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰  c++ 获取系统当前时间 c++时间戳获取方法  MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId  Angular中单选按钮的正确使用与常见陷阱解析  php源码怎么在电脑上测试_电脑测试php源码方法步骤【教程】  J*a 递归快速排序中静态变量的状态管理与陷阱  如何使用Rector自动化升级旧代码_通过Composer安装和配置Rector进行代码重构  Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程  CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色  《噬血代码2》新预告片发布 展示游戏剧情  谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航  铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则  一加 14R 快充无反应_一加 14R 充电优化  Golang如何实现Web文件静态资源服务器_Golang静态资源服务器开发与实践  Tailwind CSS line-clamp 布局问题解析与修复指南  Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示  拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧  在哪找SublimeJ远程工具_SFTP插件配置教程  如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置  192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台  荣耀Play7T运行卡顿解决_荣耀Play7T性能优化  小米14应用无法联网原因分析_小米14网络权限修复  在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明  冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法  fishbowl官网免费版 fishbowl养鱼网站入口  PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误  Python异步编程实践:使用Binance API构建实时交易数据流  谷歌google账号注册详细步骤 谷歌账号注册官方教程  必由学官网快捷入口 必由学网页版在线学习平台  HTML元素状态管理:根据DIV内容动态启用/禁用按钮  Go语言中高效处理x-www-form-urlencoded表单数据  钉钉视频会议画面卡顿如何解决 钉钉会议画面优化方法  电脑IP地址怎么查 查看本机IP地址的几种方法  网站内容防复制粘贴的实现策略与局限性 

搜索