【C++】解释C++里面奇怪的[](){}、[xxx]( int a, int b ) { return a + b; }这类写法到底是什么鬼【是著名的lambda啊啊啊啊】

缘由:有几个新手私信我,看到C++里面出现了 [](){ 代码块 }这类写法不知所云。

解答:总而言之就是C++11的新特性,Lambda函数。

其实这个lambda函数并不是C++首创的。

其实还有一个异常捕捉throw()我就不写上去了。

解释一下:

1,捕捉列表

捕捉列表总是作为lambda的开始,即出现于lambda的开始处。它是lambda的引出符(即开始标志)。编译器可以根据该“标志”来作出判断出该函数是否为lambda函数。同时“捕捉列表”能够捕捉上下文中的变量以作为lambda函数使用。

[var ] 表示以值传递方式捕捉变量var
[ =  ] 表示值传递捕捉所有父作用域变量
[&var] 表示以引用传递方式捕捉变量var
[ &  ] 表示引用传递捕捉所有父作用域变量
[this] 表示值传递方式捕捉当前的this指针
还有一些组合:
[=,&a] 表示以引用传递方式捕捉a,值传递方式捕捉其他变量
注意:
捕捉列表不允许变量重复传递,
如:[=,a]、[&,&this],会引起编译时期的错误

2,参数列表

略,跟普通函数的参数列表一样,无参数时,可以连同"()"省略掉

3,mutable修饰符

在默认的情况下,lambda函数返回值用const修饰,而当我们在参数列表后面注明了“mutable”关键字之后,则可以取消其常量性质。若在lambda中使用了mutable修饰符,则“参数列表”是不可省略掉的(即使是参数为空)。

4,返回值类型

略,你懂的

5,函数体

略,你也懂的

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值