c++中lamba表达式的使用方式

在 C++ 的 lambda 表达式中,捕获列表的内容决定了如何访问外部变量。以下是关于捕获列表的详细解释和 lambda 表达式的常见用法:

捕获列表中的使用

  1. [this]

    • 捕获当前对象的指针,使您能够访问成员变量和成员函数。
  2. [&]

    • 捕获所有外部变量的引用(即以引用的方式捕获)。这意味着在 lambda 中对这些变量的修改会反映到其原始作用域中。
    • 注意,捕获所有变量的引用是非常强大的,但也要小心使用,以避免悬空引用的问题。
  3. [=]

    • 捕获所有外部变量的副本(即以值的方式捕获)。在 lambda 中对这些变量的修改不会影响原始变量,因为它们是副本。
  4. 选择性捕获

    • 你可以选择性地捕获具体的变量,例如:
      • [&var1, var2]:捕获 var1 的引用,捕获 var2 的副本。
      • [=, &var1]:捕获所有变量的副本,但以引用的方式捕获 var1

lambda 表达式的常见用法:

  1. 传递回调函数

    • 可以将 lambda 表达式作为参数传递给其他函数,特别是在需要使用回调的场景中。
    std::sort(vec.begin(), vec.end(), [](int a, int b) {return a < b;
    });
    
  2. 事件处理

    • 在 GUI 编程或其他需要事件处理的场合,使用 lambda 表达式可以简化回调定义。
    button.onClick([]() {std::cout << "Button clicked!" << std::endl;
    });
    
  3. 异步编程

    • 在多线程编程中,lambda 可用于实现异步操作。
    std::thread([=]() {// 在新线程中执行的代码
    }).detach();
    
  4. 简化代码逻辑

    • 使用 lambda 可以避免定义单独的函数,在简单操作或一次性事件中更加清晰。
    auto result = std::transform(vec.begin(), vec.end(), output.begin(),[](int x) { return x * 2; });
    

总结:

  • 捕获列表允许您决定在哪个作用域内使用变量,并控制变量的生存期和修改能力。
  • 使用 [&] 捕获所有外部变量的引用,适合需要在 lambda 内部修改外部变量的场景,但要谨慎使用以避免悬空引用。
  • 常见的用法包括回调函数、事件处理、异步编程和逻辑简化,使代码更加简洁和高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19143.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot汽车资讯:科技与汽车的对话

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户信息管理 汽车资讯网站的系统管理员可以管理用户&#xff0c;可以对用户信息修改删除审核以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户信息管理界面 5.1.2 汽车品牌管理 系统管理员可以汽车品牌信息进行添加&#xf…

go 学习网站,go例子 go demo go学习视频

1. 代码例子&#xff1a; Go by Example 2. b站 视频&#xff1a; 尚硅谷视频&#xff1a; 004_尚硅谷_程序的基本概念_哔哩哔哩_bilibili 3. go技术文档&#xff1a; fmt Go语言中文文档

记录下,用油猴Tampermonkey监听所有请求,绕过seesion

油猴Tampermonkey监听所有请求&#xff0c;绕过seesion 前因后果脚本编写 前因后果 原因是要白嫖一个网站的接口&#xff0c;这个接口的页面入口被隐藏掉了&#xff0c;不能通过页面调用&#xff0c;幸好之前有想过逆向破解通过账号密码模拟登录后拿到token&#xff0c;请求该…

网络安全:我们的安全防线

在数字化时代&#xff0c;网络安全已成为国家安全、经济发展和社会稳定的重要组成部分。网络安全不仅仅是技术问题&#xff0c;更是一个涉及政治、经济、文化、社会等多个层面的综合性问题。从宏观到微观&#xff0c;网络安全的重要性不言而喻。 宏观层面&#xff1a;国家安全与…

多账号登录管理器(淘宝、京东、拼多多等)

目录 下载安装与运行 解决什么问题 功能说明 目前支持的平台 功能演示 登录后能保持多久 下载安装与运行 下载、安装与运行 语雀 解决什么问题 多个账号的快捷登录与切换 功能说明 支持多个电商平台支持多个账号的登录保持支持快捷切换支持导入导出支持批量删除支持…

浅谈网络 | 二层到三层

目录 物理层到MAC层第一层&#xff08;物理层&#xff09;第二层&#xff08;数据链路层&#xff09;局域网 交换机与VLAN生成树协议VLAN ICMP与pingICMP 协议的格式 网关静态路由是什么&#xff1f; 路由协议如何配置策略路由&#xff1f;动态路由算法动态路由协议 物理层到MA…

c++ 后端

基础知识 1. 指针、引用2. 数组3. 缺省参数4. 函数重载5. 内联函数6. 宏7. auto8. const9. 类和对象10. 类的6个默认成员函数11. 初始化列表12. this指针13. C/C的区别14. C 三大特性15. 结构体内存对齐规则16. explicit17. static18. 友元类、友元函数19. 内部类20. 内存管理&…

汽车资讯新趋势:Spring Boot技术解读

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户信息管理 汽车资讯网站的系统管理员可以管理用户&#xff0c;可以对用户信息修改删除审核以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户信息管理界面 5.1.2 汽车品牌管理 系统管理员可以汽车品牌信息进行添加&#xf…

【C++】vector

一、vector的介绍及使用 1.1 vector的介绍 vector的底层与string相似都是顺序表形式管理数组&#xff0c;本质上来说string就可以归入到vector里面&#xff0c;但是在实际使用中&#xff0c;字符有很多自身独有的接口设计需要&#xff0c;因此string被单独拿出来设计。在前面s…

uniapp Uview上传图片组件Upload会自动刷新

背景 最近在做跑团小程序&#xff0c;马上接近尾声了&#xff0c;今天新增一个团长增加活动页面&#xff1a; 然后一切准备就绪&#xff0c;发现了一个问题&#xff0c;当选择上传图片后&#xff0c;页面会自动刷新&#xff0c;把之前填写的信息全部重置了。奇怪了&#xff0c…

软件测试之缺陷管理

一、软件缺陷的基本概念 1、软件缺陷的基本概念主要分为&#xff1a;缺陷、故障、失效这三种。 &#xff08;1&#xff09;缺陷&#xff08;defect&#xff09;&#xff1a;存在于软件之中的偏差&#xff0c;可被激活&#xff0c;以静态的形式存在于软件内部&#xff0c;相当…

数字资产与大健康领域的知识宝藏:高效知识库搭建策略

在数字化时代&#xff0c;大健康领域的企业积累了丰富的数字资产&#xff0c;这些资产如同一座待挖掘的金矿&#xff0c;蕴含着巨大的价值。高效搭建知识库&#xff0c;能够将这些数字资产转化为企业竞争力。 数字资产与大健康领域知识宝藏 数字资产在大健康领域包括患者数据…

使用WebRTC实现点对点实时音视频通信的技术详解

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用WebRTC实现点对点实时音视频通信的技术详解 使用WebRTC实现点对点实时音视频通信的技术详解 使用WebRTC实现点对点实时音视频…

Leetcode打卡:最少翻转次数使二进制矩阵回文II

执行结果&#xff1a;通过 题目&#xff1a;3240 最少翻转次数使二进制矩阵回文II 给你一个 m x n 的二进制矩阵 grid 。 如果矩阵中一行或者一列从前往后与从后往前读是一样的&#xff0c;那么我们称这一行或者这一列是 回文 的。 你可以将 grid 中任意格子的值 翻转 &…

VTK知识学习(9)-空间变换

1、前言 在三维空间里定义的三维模型&#xff0c;最后显示时都是投影到二维平面&#xff0c;比如在屏幕上显示。 三维到二维的投影包括透视投影&#xff08;Perspective Projection&#xff09;和正交投影&#xff08;Orthogonale Projection&#xff09;。正交投影也叫平行投…

英伟达 Isaac Sim仿真平台安装体验

硬件配置、系统 RTX 3080RAM: 32Gi7-12700Fubuntu20.04 使用Omniverse launcher安装加载isaac sim 这种方法我并没有成功&#xff0c;因为启动的时候报错Failed to create any GPU devices, including an attempt with compatibility mode. 。后面我选择使用 isaac sim dock…

笔记02----重新思考轻量化视觉Transformer中的局部感知CloFormer(即插即用)

1. 基本信息 论文标题: 《Rethinking Local Perception in Lightweight Vision Transformer》中文标题: 《重新思考轻量化视觉Transformer中的局部感知》作者单位: 清华大学发表时间: 2023论文地址: https://arxiv.org/abs/2303.17803代码地址: https://github.com/qhfan/CloF…

LVGL-从入门到熟练使用

LVGL简介 LVGL&#xff08; Light and Versatile Graphics Library &#xff09;是一个轻量、多功能的开源图形库。 1、丰富且强大的模块化图形组件&#xff1a;按钮 、图表 、列表、滑动条、图片等 2、高级的图形引擎&#xff1a;动画、抗锯齿、透明度、平滑滚动、图层混合等…

【python系列】python数据类型的分类和比较

一、数据类型的定义 在程序设计的类型系统中&#xff0c;数据类型&#xff08;英语&#xff1a;Data type&#xff09;&#xff0c;又称资料型态、资料型别&#xff0c;是用来约束数据的解释。——Wikipedia 从定义我们可以看出来&#xff0c;数字类型的理解最主要的是约束数据…

SpringBoot(二十七)SpringBoot集成XRebel实现异常定位

之前我使用JRebel实现了IDEA热更新。 这几天我无聊的时候&#xff0c;研究了一下JRebel发现&#xff0c;好像不止JRebel一个插件&#xff0c;同时安装的还有一个XRebel插件&#xff0c;百度了一下&#xff0c;XRebel可以实现异常定位&#xff0c;还有方法的执行分析&#xff0c…