当前位置: 首页 > news >正文

C++之lambda表达式使用解读

今天来详细解读一下C++中的这种表达:

auto reset_horn_state = [&]() {horn_count_ = 0;control_command->mutable_signal()->set_horn(false);AINFO << "horn count reset to 0";};

这是一个C++中的lambda表达式

语法结构解析

auto reset_horn_state = [&]() {horn_count_ = 0;control_command->mutable_signal()->set_horn(false);AINFO << "horn count reset to 0";
};

1. auto reset_horn_state =

  • auto:自动类型推导,让编译器推断lambda的类型
  • reset_horn_state:给这个lambda函数起的变量名

2. [&] - 捕获列表

  • [&] 表示以引用方式捕获所有外部变量
  • 在lambda函数内部可以访问和修改所有当前作用域内的变量
  • 具体捕获了:
    • horn_count_(成员变量)
    • control_command(函数参数)
    • horn_conf等局部变量

3. () - 参数列表

  • 空括号 () 表示这个lambda函数不接受任何参数

4. 函数体 { ... }

包含三条执行语句:

{horn_count_ = 0;                           // 重置计数器control_command->mutable_signal()->set_horn(false);  // 关闭喇叭AINFO << "horn count reset to 0";          // 输出日志
}

使用方式

定义后,可以像普通函数一样调用:

reset_horn_state();  // 执行重置操作

等价的传统函数写法

如果用传统函数实现,需要这样写:

// 需要在类中声明成员函数
void ResetHornState() {horn_count_ = 0;control_command->mutable_signal()->set_horn(false);AINFO << "horn count reset to 0";
}// 或者传递所有需要的参数
void ResetHornState(int& horn_count, ControlCommand* control_command) {horn_count = 0;control_command->mutable_signal()->set_horn(false);AINFO << "horn count reset to 0";
}

Lambda的优势

  1. 封装性:将相关操作打包成一个逻辑单元
  2. 避免重复:在多个地方调用相同的重置逻辑
  3. 作用域控制:只在当前函数内可见,不污染类接口
  4. 捕获便利:自动捕获所需变量,无需手动传递参数

其他捕获方式

  • [=]:以值方式捕获(不能修改外部变量)
  • [horn_count_, control_command]:只捕获特定变量
  • [&horn_count_, control_command]:以引用方式捕获特定变量
  • [this]:捕获当前类的this指针

这种写法让代码更加模块化可维护,特别是在多个地方需要执行相同重置操作的场景下。

扩展学习巩固

学习解读一下一下代码:

auto set_horn_and_log = [&](bool horn_state, const std::string& phase) {control_command->mutable_signal()->set_horn(horn_state);AINFO << "[horn controller]: " << phase << ", horn count: " << horn_count_;};
http://www.dtcms.com/a/573300.html

相关文章:

  • kanass零基础学习,如何做好测试管理
  • 五、RPA案例:起点中文网强推小说自动化保存
  • 【2025最新】04 Spring Boot 构建 RESTful Web 服务
  • ComfyUI资源网: 一站式 ComfyUI 工具与学习社区
  • 泉州网站建设网络推广网站超市系统 源码
  • IOT——STM32F031K6U6+RS485+BMP280
  • 怎么才能实现网站HTTPS访问?
  • 供应链安全:数字时代的关键防线
  • 冰雹气候特征
  • 云服务器安装jdk——超详细
  • 【Linux】进程间通信(一)匿名管道原理剖析与进程池手动实现全流程
  • 【Qt开发】布局管理器(三)-> QGridLayout 网格布局
  • *绿色新华-生态金融*系统程序方案
  • 新乡百度关键词优化外包seo网站关键词优化排名
  • wordpress搭建商城百度关键词优化手段
  • Stirling-PDF合并拆分加密样样行:cpolar内网穿透实验室第563个成功挑战
  • vue 后端nodejsexpress-generator 脚手架环境搭建
  • 市政二级总承包资质承包范围seo软件排行榜前十名
  • 网站设计奖wordpress媒体库搜索
  • 代码随想录训练营打卡Day37| 动态规划part05
  • 实战代码解析:拼多多 item_search API 使用教程
  • 基于栅格地图的遗传算法路径规划MATLAB实现
  • 公司网站二维码生成器网络营销ppt讲解
  • Java中Stream使用示例-对实体List分组且保留原数据顺序并对分组后的每组内的数据进行部分业务逻辑修改操作
  • 大型购物网站建设方案wordpress登录页面模板下载
  • CSS 选择器详解
  • MySQL的DATE_ADD函数详解
  • 请求头是什么
  • 【EMNLP2025】阿里云人工智能平台PAI多篇论文入选EMNLP2025
  • 南宁网站推广工具wordpress动图