一、格式
大括号内是变量捕获,小括号内是参数列表。变量捕获的来源都是当前位置“能看得见”的变量。
二、 变量捕获
上图左:将它“能看得见”的变量都按引用捕获。 上图右:将它“能看得见”的变量都按值捕获。
比如某个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表达式不能直接输出(也许通过某种重载可以?)