1 Lambda结构
Lambda是C++11中新增的机制,它其实就是匿名函数,任何可以在用函数指针或者函数对象的地方就可以用Lambda表达式,它的结构如下所示
[](parameter)mutable throw() -> Type{
//body
}
[] 是capture列表,parameter是函数参数,mutable让传值的捕捉能够改变其值,throw()是抛出异常,->Type是函数返回值,{}是函数体
2 关于capture
首先capture 可以有3种情况 default, list, default + list,下面一一介绍
《1》default
它表达的是捕捉列表中所有对象的默认传递情况
有[&],[=]两种形式,[&] 表示所有的变量都是以引用传递,那么所有变量都可以在{}中被修改,并且调用结束后,修改被保存下来。
[=]表示所有的变量都是传值调用,并且默认情况下传值调用的变量在{}中不能被修改,如果要修改,则必须在在Lambda中添加mutable关键字。
《2》list
就是把所有变量一个一个加入到列表中,加入的方式可以有传引用方式,传值方式,或者混合,如下所示:
[x,y],[&x,&y],[&x,y]
list中一种特殊情况就是[],他表示不传递任何变量,所以在{}中不
Lambda是C++11中新增的机制,它其实就是匿名函数,任何可以在用函数指针或者函数对象的地方就可以用Lambda表达式,它的结构如下所示
[](parameter)mutable throw() -> Type{
//body
}
[] 是capture列表,parameter是函数参数,mutable让传值的捕捉能够改变其值,throw()是抛出异常,->Type是函数返回值,{}是函数体
2 关于capture
首先capture 可以有3种情况 default, list, default + list,下面一一介绍
《1》default
它表达的是捕捉列表中所有对象的默认传递情况
有[&],[=]两种形式,[&] 表示所有的变量都是以引用传递,那么所有变量都可以在{}中被修改,并且调用结束后,修改被保存下来。
[=]表示所有的变量都是传值调用,并且默认情况下传值调用的变量在{}中不能被修改,如果要修改,则必须在在Lambda中添加mutable关键字。
《2》list
就是把所有变量一个一个加入到列表中,加入的方式可以有传引用方式,传值方式,或者混合,如下所示:
[x,y],[&x,&y],[&x,y]
list中一种特殊情况就是[],他表示不传递任何变量,所以在{}中不