【一】Lambda表达式

news2025/1/15 13:55:27

1.Lambda表达式概述
​ Lambda表达式是现代C++在C ++ 11和更高版本中的一个新的语法糖 ,在C++11、C++14、C++17和C++20中Lambda表达的内容还在不断更新。 lambda表达式(也称为lambda函数)是在调用或作为函数参数传递的位置处定义匿名函数对象的便捷方法。通常,lambda用于封装传递给算法或异步方法的几行代码 。
2.Lambda表达式定义

2.1 Lambda表达式语法定义


1) 捕获列表。在C ++规范中也称为Lambda导入器, 捕获列表总是出现在Lambda函数的开始处。实际上,[]是Lambda引出符。编译器根据该引出符判断接下来的代码是否是Lambda函数,捕获列表能够捕捉上下文中的变量以供Lambda函数使用。

  • []表示不捕获任何变量
  • [var]表示值传递方式捕获变量var
  • [=]表示值传递方式捕获所有父作用域的变量(包括this)
  • [&var]表示引用传递捕捉变量var
  • [&]表示引用传递方式捕捉所有父作用域的变量(包括this)
  • [this]表示值传递方式捕捉当前的this指针
  • [=,&a,&b]表示以引用传递的方式捕捉变量a和b,以值传递方式捕捉其它所有变量
  • [&,a,this]表示以值传递的方式捕捉变量a和this,引用传递方式捕捉其它所有变量。

2) 参数列表。与普通函数的参数列表一致。如果不需要参数传递,则可以连同括号“()”一起省略。
3) 可变规格*。mutable修饰符, 默认情况下Lambda函数总是一个const函数,mutable可以取消其常量性。在使用该修饰符时,参数列表不可省略(即使参数为空)。*
4)异常说明。用于Lamdba表达式内部函数抛出异常。
5)返回类型。 追踪返回类型形式声明函数的返回类型。我们可以在不需要返回值的时候也可以连同符号”->”一起省略。此外,在返回类型明确的情况下,也可以省略该部分,让编译器对返回类型进行推导。
6)lambda函数体。内容与普通函数一样,不过除了可以使用参数之外,还可以使用所有捕获的变量。
 

3.  应用案例

#include <iostream>
using namespace std;
class Test
{
public:
    void Func(int x, int y)
    {
        auto f = [this] {
            return m_a;
        };
        cout << f() << endl;
    }
 
 
private:
    int m_a = 10;
};
int main(int argc, const char* argv[])
{
    //1.[]不捕获任何变量
    int j = 5;
//    auto f = [] {return j; };	//编译报错
 
 
    //2. 静态局部变量,可以直接使用
    static int i = 9;
    auto f1 = [] {return i; };
    cout << f1() << endl;	//15
 
 
    //3. [&]捕获外部作用域中所有变量,并作为引用在函数体内使用
    int m = 9;
    auto f2 = [&] {
        m = 15;
        return m;
    };
    cout << f2() << endl;	//15
    cout << m << endl;	//15
 
 
    //4. [=]捕获外部作用域中所有变量,并作为值(副本)在函数体内使用,但不许给它赋值
    int k = 1;
    auto f3 = [=] {
//        k = 15;	//非法,不可以给它赋值,因为是以值的方式捕获
    };
 
 
    //5. [this]捕获当前类中this指针,让lambda表达式有和当前类成员函数同样的访问权限。
    //如果[]中已经使用了 & 或 =,那么默认已经使用了this,可以使用当前类的成员变量和成员函数。
    Test test;
    test.Func(10, 12);
 
 
    //6. [变量名]如果多个变量名,则彼此之间用,分割,按值捕获变量名代表的变量,其他的变量则不捕获
    //	[&变量名]按引用捕获变量名代表的变量,同时不捕获其他变量
    int a = 10, b = 5;
    auto f4 = [a, b] {	//[&a, &b]
        cout << a <<" " <<  b << endl;
    };
    f4();
 
 
    //7. [=,&变量名] 按值捕获所有外部变量,但按引用捕获&中所指的变量,
    //=必须在开头位置,表示默认以值捕获(隐式捕获方式),后续其他的都是显示捕获
    auto f5 = [=, &a, &b] {
        cout << k << " " << a << " " << b << endl;
    };
 
 
    //8. [&, 变量名] 和7相反作用
    auto f6 = [&, a, b] {
        cout << k << " " << a << " " << b << endl;
    };
 
 
    return 0;
}
 

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

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

相关文章

BookStack 详解及 Docker-Compose 部署

BookStack 是一款用于创建文档和文档管理的开源平台。它提供了一个直观且功能丰富的界面&#xff0c;可用于组织和管理各种文档&#xff0c;包括文档编写、编辑和共享。本文将介绍 BookStack 的核心功能&#xff0c;并展示如何使用 Docker-Compose 快速部署 BookStack。 BookS…

Qt 窗口常用位置API函数 绘图原理 双缓冲机制 总结

一、Qt 窗口API函数基础知识 在Qt窗口编程中&#xff0c;常用的API函数有&#xff1a; QWidget类的API函数&#xff1a;包括setWindowTitle()、resize()、move()、show()、hide()、setFixedSize()、setWindowFlags()等。 QMainWindow类的API函数&#xff1a;包括setCentralWi…

竞赛选题 深度学习二维码识别

文章目录 0 前言2 二维码基础概念2.1 二维码介绍2.2 QRCode2.3 QRCode 特点 3 机器视觉二维码识别技术3.1 二维码的识别流程3.2 二维码定位3.3 常用的扫描方法 4 深度学习二维码识别4.1 部分关键代码 5 测试结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天…

IDEA使用http client无法识别http-client.env.json的环境配置

http-client.env.json的配置 {"dev": {"baseUrl": "http://192.168.60.176:9160","accessToken": "eyJhbPNOQ"} }选择不到环境 问题原因&#xff1a; 安装了Alibaba Cloud Toolkit插件后&#xff0c;被Alibaba Cloud ROS …

vue3中使用百度地图

基本使用 在项目的index.html加入以下代码(记得替换成自己的key) <script type"text/javascript" src"https://api.map.baidu.com/api?v1.0&typewebgl&ak自己的key"></script>在组件中加入以下代码 <template><div id&qu…

CAN通信

通讯方式 UART&#xff1a;(Universal Asynchronous Receiver Transmitter&#xff1a;通用异步收发器/异步串行通信口)&#xff0c;是一种通用的串行数据总线&#xff0c;用于异步通信&#xff0c;支持全双工。它包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线…

中文连续视觉语音识别挑战赛

视觉语音识别&#xff0c;也称唇语识别&#xff0c;是一项通过口唇动作来推断发音内容的技术。该技术在公共安全、助老助残、视频验真等领域具有重要应用。当前&#xff0c;唇语识别的研究方兴未艾&#xff0c;虽然在独立词、短语等识别上取得了长足进展&#xff0c;但在大词表…

FCKeditor编辑器漏洞

FCKeditor在网页上属于开发源代码的文字编辑器&#xff0c;FCK是作者的名字 搭建环境 查看版本http://192.168.246.20:89/_whatsnew.html 编辑器界面http://192.168.246.20:89/_samples/default.html 常用上传地址 FCKeditor/editor/filemanager/browser/default/browser.html…

华为云HECS服务器下docker可视化(portainer)

一、docker安装 华为云HECS安装docker-CSDN博客 二、portainer安装 portainer地址&#xff1a;Portainer: Docker and Kubernetes Management Platform 当前portainer分CE&#xff08;开源版&#xff09; 和 BE&#xff08;商业版&#xff09;&#xff0c;用CE即可 1 创建…

聚观早报 | 真我GT5 Pro即将登场;OPPO Find N3即将亮相

【聚观365】10月18日消息 真我GT5 Pro即将登场 OPPO Find N3即将亮相 小米澎湃OS正式版已完成封包 百川智能获3亿美元A1轮融资 理想MEGA实车曝光 真我GT5 Pro即将登场 8月28日&#xff0c;全新的真我GT5正式亮相&#xff0c;该机拥有安卓阵营最强悍的性能配置&#xff0c…

kali使用docker安装DVWA

上一篇文章我记录了如何使用kali安装DVWA&#xff0c;但是我是一个一个组件安装的&#xff0c;非常麻烦&#xff0c;比如数据库还需要配置&#xff0c;花费时间很多。昨天在逛github时&#xff0c;发现大佬的靶场都是通过docker打包好的&#xff0c;如果我也用docker安装DVWA&a…

[部署网站02]下载安装 unix PHP7.4 Swoole Loader扩展文件

1.下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/13FA0lu_9uu6yhpHHA0P2yA?pwdhft7 提取码&#xff1a;hft7 2 、安装Swoole Loader 将刚才下载的Swoole Loader扩展文件&#xff08;swoole_loader74.so&#xff09;上传到当前PHP的扩展安装目录中&#x…

DAQ进行准确的测量,为决策提供更可靠的依据

进行准确的测量&#xff0c;为决策提供更可靠的依据 DAQExpress提供了交互式分析面板&#xff0c;可帮助您轻松配置兼容的测量硬件&#xff0c;以及查看分析测量数据。无需编程即可立即捕获测量数据&#xff0c;或者在DAQExpress编辑器中创建一个基本的LabVIEW VI&#xff0c;…

BERT变体(1):ALBERT、RoBERTa、ELECTRA、SpanBERT

Author:龙箬 Computer Application Technology Change the World with Data and Artificial Intelligence ! CSDNweixin_43975035 *天下之大&#xff0c;虽离家万里&#xff0c;何处不可往&#xff01;何事不可为&#xff01; 1. ALBERT \qquad ALBERT的英文全称为A Lite versi…

【Leetcode】【简单】136.只出现一次的数字

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/single-number/description/ 给…

【AIFEM案例操作】水轮机转轮强度和模态分析

AIFEM是由天洑自主研发的一款通用的智能结构仿真软件&#xff0c;助力用户解决固体结构相关的静力学、动力学、振动、热力学等实际工程问题&#xff0c;软件提供高效的前后处理工具和高精度的有限元求解器&#xff0c;帮助用户快速、深入地评估结构的力学性能&#xff0c;加速产…

矩阵置零(C++解法)

题目 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例 2&#xff1a; 输入…

Spring AMQP

大家好我是苏麟 今天说一说spring aqmp。 SpringAMQP SpringAMQP是基于RabbitMQ封装的一套模板&#xff0c;并且还利用SpringBoot对其实现了自动装配&#xff0c;使用起 来非常方便。 官方 : Spring AMQP 依赖 <!--AMQP 包含RabbitMQ--><dependency><groupId&g…

三款经典的轮式/轮足机器人讲解,以及学习EG2133产生A/B/C驱动电机。个人机器人学习和开发路线(推荐)

1&#xff0c;灯哥开源&#xff08;有使用指南&#xff0c;适合刚入门新手&#xff09; 机械部分&#xff1a;2个foc无刷电机 硬件和软件部分&#xff1a;没有驱动板子。只有驱动器&#xff0c;主控板esp32和驱动器通过pwm直接通讯。驱动器板子上有蓝色电机接口&#xff0c;直…

常见的 NoSQL 数据库有哪些?

前言 今天我们来介绍一下工作开发中常见的一些NoSQL数据库及其基本特点。欢迎在评论区留下文章中没有介绍且好用的NOSQL数据库&#x1f91e;。 什么是&#xff08;NOSQL&#xff09;非关系型数据库 非关系型数据库又被称为 NoSQL&#xff08;Not Only SQL )&#xff0c;意为不…