Lambda表达式
1、什么是Lambda表达式
用于定义匿名函数,使得代码更加灵活和简洁。常见形式如下:
auto plus = [] (int v1,int v2) -> int {return v1 + v2;}
int sum = plus(1,2)
2、完整的表达式类型
[capture] (parameters) mutable ->return-type {statement};
即 [捕获列表](参数)mutable -> 返回值 {函数体}
- capture捕获列表:lambda可以把上下文变量以值或引用的方式捕获,在body中直接使用
- params参数列表
- return-type:返回值类型
- statement:函数的具体逻辑
3、捕获列表
常用的捕获方式:
值捕获:值捕获的方式,就是在创建的时候,把这个变量的值复制给局部的临时变量,然而这个值不能在lamda内部被修改,如果想要在内部修改这个值,可以在捕获列表后加mutable,修改后对原变量没有影响。
引用捕获:这种捕获方式在编译期间不会把变量的值复制到lambda的局部作用域,而是直接对这个引用所指的变量进行操作。这种方式对值进行修改,会对原变量也造成修改。
隐式捕获:如果lambda中需要用到的非静态局部变量非常多,全部写入捕获列表,就会显得非常臃肿,有简便写法,即为隐式捕获。
1、捕获列表的形式为"[=]"(值捕获)或者"[&]"(引用捕获);
2、捕获列表里不能同时写"="和"&",即"[=, &]"是非法的;
3、隐式捕获可以和显式捕获搭配使用,但不能和同类型的显示捕获一起使用。即隐式值捕获只能搭配显式引用捕获,隐式引用捕获只能搭配显式值捕获。表现形式为:"[=,&变量1,&变量2]"或者"[&,变量1,,变量2]"。
参考链接:C++基础(九)再谈lambda 值捕获、引用捕获、隐式捕获以及避坑_值捕获和引用捕获-CSDN博客
标签:变量,捕获,列表,引用,隐式,表达式,Lambda From: https://www.cnblogs.com/mjyrise/p/18077024