C++Lambda表达式,自解

自己对Lambda表达式的浅显理解,只求暂时会用。

格式:

[caputrue](params)opt->ret{body;};
[函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 -> 返回值类型 {函数体}

说明:返回函数指针。

1.[函数对象参数]必须。
即用来捕获所在作用域内外部定义的已知变量(可以是局部变量,也可以是成员变量),用来在Lambda函数体内使用。

捕获的方式可以是引用也可以是复制,具体说来会有以下几种情况来捕获其所在作用域中的变量:
[]:默认不捕获任何变量;
[=]:默认以值捕获所有变量;
[&]:默认以引用捕获所有变量;
[x]:仅以值捕获x,其它变量不捕获;
[&x]:仅以引用捕获x,其它变量不捕获;
[=, &x]:默认以值捕获所有变量,但是x是例外,通过引用捕获;
[&, x]:默认以引用捕获所有变量,但是x是例外,通过值捕获;
[this]:通过引用捕获当前对象(其实是复制指针);
[*this]:通过传值方式捕获当前对象;

捕获局部变量:

int na = 6;
auto func1 = [na](){ return na + 10; };
cout <<"test1:" << func1() << endl;

捕获类变量:可以使用this,=,&等处理。

2.(参数列表):参数可以缺省,和一般函数的参数列表使用一样。

auto func2 = [](int _x,int _y){ return _x+_y; };
cout << "test2:" << func2(3,4) << endl;


3.opt,函数选项(可省略)
可以填mutable,exception,attribute
mutable    表示函数体可以修改传值方式捕获的变量;
exception  说明是否抛出异常以及何种异常;
attribute   声明属性;

int na3 = 6;
auto func3 = [&na3](int _x, int _y) mutable->int{ return na3 = _x + _y; };
func3(3, 4);
cout << "test3:" << na3 << endl;//输出na3 = 7;

4.->ret,返回类型(auto可以自动推导 ,可省略)


5.{}函数体,可以和普通函数一样写,可以使用捕获的参数,可以传递参数。

 

 

参考博客:

[1]https://www.cnblogs.com/AlainGao/p/10675201.html

[2]https://blog.csdn.net/Sum7mer/article/details/89636651

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值