首页 > 编程语言 >C++ lambda函数

C++ lambda函数

时间:2023-07-15 21:57:38浏览次数:32  
标签:变量 捕获 C++ 小括号 lambda 表达式 函数

一、格式


大括号内是变量捕获,小括号内是参数列表。变量捕获的来源都是当前位置“能看得见”的变量。

二、 变量捕获



上图左:将它“能看得见”的变量都按引用捕获。 上图右:将它“能看得见”的变量都按值捕获。
比如某个lambda表达式在语句块内,但是它全体引用捕获的话可以捕获全局变量

上图:按值捕获N, 其余变量按引用捕获。

上图:在只有变量M,N的情况下,四个式子等价

在类中捕获当前实例的指针
在c++14和c++17中有拓展,具体不展示
所有图片来自https://www.bilibili.com/video/BV1fG41157Ew/?spm_id_from=333.337.search-card.all.click&vd_source=8e542be705d993c91535e3a91be6652f

三、注意

因为它毕竟也是一个表达式,所以
1.lambda表达式末尾必须要有分号
2.可以在语句块内定义,当然也可以在外面。全局变量之类的可以直接用在函数体里面
3.调用方法和普通函数完全一样
4.如果没有参数的话小括号里可以是空的,也可以根本不写小括号。但这个时候不能写 ->[返回值]
5.如果lambda表达式没有参数(比如某个lambda表达式叫f,他没有参数),调用的时候必须要写f();如果只写f的话只是一个lambda表达式,并没有调用它
6.lambda表达式不能直接输出(也许通过某种重载可以?)

标签:变量,捕获,C++,小括号,lambda,表达式,函数
From: https://www.cnblogs.com/okljlwi/p/17557031.html

相关文章

  • 1-19 编写函数 reverse(s),将字符串 s 中的字符顺序颠倒过来。使用该函数 编写一个程
    ArchlinuxGCC13.1.1 202304292023-07-1521:41:44星期六 点击查看代码#include<stdio.h>#include<string.h>voidreverse(char*s);voidreverse_in();intmain(){reverse_in();return0;}voidreverse(char*s){inti,j;......
  • 五、函数的基础--2.函数的参数与返回值
    C语言函数的参数和返回值是函数定义时用来传递数据和返回结果的机制。函数参数:1.参数是函数定义中用于接收外部数据的变量。函数可以有零个或多个参数,每个参数包括类型和名称。2.参数允许将数据从函数的调用者传递到函数内部,函数在执行时可以使用这些参数来完成特定任务。3.参数......
  • LINQ和lambda表达式
    LINQ:select结尾,from开头(from->where->groupby->having->orderby->join->select)vartt=fromaaincdselectaa.Count();//查询一个值就不用数组连接数组,joinin放在select前面varty=froma1inwer//用var或者IEnume......
  • lightdb plpgsql函数in/inout参数示例
    lightdb支持oraclepl/sql以及开源postgresqlPlpgsql两种过程性(增强)语言。本文讲解pgpgsql函数出参的典型用法及限制。注:匿名块实际上走的是plorasql,而非plpgsql,即使调用的是plpgsql过程。本文我们假设对于函数、存储过程的调用是进行逻辑处理,而不是返回结果集或游......
  • 如何使用C#中的Lambda表达式操作Redis Hash结构,简化缓存中对象属性的读写操作
    Redis是一个开源的、高性能的、基于内存的键值数据库,它支持多种数据结构,如字符串、列表、集合、散列、有序集合等。其中,Redis的散列(Hash)结构是一个常用的结构,今天跟大家分享一个我的日常操作,如何使用Redis的散列(Hash)结构来缓存和查询对象的属性值,以及如何用Lambda表达式树来简化......
  • Python 20个魔法函数
    本文将为您详细介绍Python中的20个魔法函数,这些函数能够在代码中释放神奇的力量。让我们一起来了解这些特殊的函数,并提供一些在实际接口自动化工作中的示例代码。魔法函数(MagicMethods),也被称为特殊方法或双下划线方法,是Python中一些特殊命名的函数,它们以双下划线开头和结尾......
  • 函数strtok()的使用
    #include<string.h>#include<stdio.h>intmain(){charstr[50]="lidan,wangyang;zhangwei:shunbin?yifan'xinyue";char*p[7];inti=0;p[i]=strtok(str,",;?':");while(p[i]!=NULL){ i++; p......
  • python3函数加锁
    Python3函数加锁的实现流程概述为了实现函数加锁,我们需要使用线程锁(threadlock)来确保在多线程环境下函数的原子性操作。以下是实现函数加锁的流程概述:导入threading模块,该模块提供了线程相关的功能。创建一个线程锁对象。在需要加锁的函数内部,使用acquire方法获取锁。执行......
  • VS2015 C++代码内存泄漏
    在可能泄漏的文件头部加入下面几行(保证malloc和new的泄漏都可以检测到)#define_CRTDBG_MAP_ALLOC#include<crtdbg.h>#ifdef_DEBUG//重载new运算符#definenewnew(_NORMAL_BLOCK,__FILE__,__LINE__)#endif程序运行起始位置:_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_C......
  • 104.字符串函数:strlen函数,strcpy函数,strcat函数,strcmp函数
    104.字符串函数:strlen函数,strcpy函数,strcat函数,strcmp函数1.字符串函数strlen(1)strlen函数strlen函数返回的是在字符串中’\0’前面出现的字符的个数(2)strlen的使用a.代码#include<stdio.h>#include<string.h>intmain(){ charstr1[]="abcdef"; printf("%d\n",s......