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

什么是 C++ 中的 Lambda 表达式?Lambda 表达式可以捕获哪些类型的变量?有哪些捕获方式?

1) 什么是 C++ 中的 Lambda 表达式?它的作用是什么?

Lambda 表达式 是 C++11 引入的一种定义匿名函数对象的方式。它允许你在代码中直接定义短小的函数对象,而不需要显式地定义一个类或者函数。Lambda 表达式通常用于需要传递函数对象作为参数的场景,或者在局部范围内需要临时定义一个函数对象时使用。

作用

  • 简化代码:在需要传递函数作为参数或者回调函数的场景中,Lambda 表达式可以显著减少代码量。
  • 提高可读性:在需要定义一次性使用的简单函数时,Lambda 表达式可以让代码更加紧凑和直观。
  • 方便捕获上下文:Lambda 表达式可以捕获其所在作用域中的变量,使得函数对象可以访问和操作这些变量。

2) Lambda 表达式可以捕获哪些类型的变量?有哪些捕获方式?

捕获类型

  • 值捕获:Lambda 表达式通过值的方式捕获变量,即复制变量的值。
  • 引用捕获:Lambda 表达式通过引用的方式捕获变量,即使用变量的引用。
  • 按表达式捕获:C++14 引入的一种捕获方式,允许在捕获时执行表达式(例如 [=, &x](...) { ... } 中 = 表示值捕获所有外部变量,而 &x 表示按引用捕获 x)。

捕获方式

  1. 值捕获 ([=]):
    • Lambda 表达式以值的方式捕获其所在作用域中所有可见的变量。
    • 示例:[=](int a) { return a + x; },其中 x 是捕获的变量。
  2. 引用捕获 ([&]):
    • Lambda 表达式以引用的方式捕获其所在作用域中所有可见的变量。
    • 示例:[&](int a) { x = a + 1; },其中 x 是捕获的变量。
  3. 显式捕获
    • 允许显式指定哪些变量以值捕获,哪些以引用捕获。
    • 示例:[x, &y](int a) { return x + y + a; },其中 x 是值捕获,y 是引用捕获。
  4. 无捕获 ([]):
    • 不捕获任何变量。
    • 示例:[](int a, int b) { return a * b; }
  5. 按表达式捕获 ([=, &x] 或 [&, x]):
    • C++14 引入的特性,允许混合捕获方式,并且可以在捕获时进行表达式计算。
    • 示例:[=, x * 2](int a) { return x_double + a; },其中 x_double 是 x * 2 的结果,x 是按值捕获的变量。

通过这些捕获方式,Lambda 表达式可以灵活地控制对外部变量的访问,使代码更加简洁和高效。


http://www.kler.cn/a/411819.html

相关文章:

  • 【机器学习chp8】统计学习理论
  • js版本之ES5特性简述【String、Function、JSON、其他】(二)
  • Spring Boot 3.4 正式发布,结构化日志!
  • web day03 Maven基础 Junit
  • 验证视图状态 MAC 失败,配置machineKey
  • C语言解析命令行参数
  • python的交互式编程
  • 触想工业显示器应用于光伏自动化设备,助力绿色低碳能源发展
  • YOLOv8模型pytorch格式转为onnx格式
  • js.二叉树的层序遍历2
  • [C++]:IO流
  • JavaWeb后端开发知识储备2
  • 嵌入式QT中UDP通信实现方法
  • 单例模式入门
  • 文件系统的作用
  • C++条件编译指令:#if、#elif、#ifdef、#ifndef、#elifdef、#elifndef、#else、#endif
  • On-Chip-Network之routing
  • [HarmonyOS] 解决HMRouter路由地址无法抽取的问题
  • C#上机练习66-70
  • 网络安全防范
  • 鸿蒙HarmonyOS学习笔记(4)
  • 3D导航案例
  • 钉钉与企业微信机器人:助力网站定时任务高效实现
  • RTMP协议
  • 基于matlab的电力系统潮流计算
  • js中this的指向问题