Lambda表达式

形式:

[捕获列表](参数列表)->返回值类型{函数体}
1. 最简形式只有捕获列表与函数[]{}
2. 当没有返回值类型且函数仅仅只有return语句可以自动推导返回类型,否则一律返回void

捕获列表:

只能捕获当前函数的非static变量,对不在该函数中的变量可以直接使用,无需捕获,且可修改
1. 值捕获(默认方式)[var],在表达式创建时捕获, 不可以在函数体中更改该变量值,默认只读,如要修改,在参数列表后加mutable,多个捕获变量,用逗号进行隔开
2. 引用捕获 [&val],多个变量用逗号进行隔开
3. 隐式捕获 [=]:全部以值的方式捕获 [&]:全部以引用的方式进行捕获
4. 隐式与显示混合捕获: [&, var]:引用隐式捕获与值捕获混合,[=,&var]:值隐式捕获与值捕获相结合,“=、&“符号必须放在最前面

代码样例

#include <bits/stdc++.h>
using namespace std;
int main(){
    
    vector<int> num = {1,-1,-2};
    for_each(num.begin(), num.end(), [](int& a){
        a = a < 0 ? -a : a;
    });
    for(auto value : num)cout<<value<<" ";
    cout<<endl;
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。