一个Lambda函数例子:
int main()
{
int girls = 3,boys=4;
auto totalChild = [] (int x, int y)->int {return x+y;};
return totalChild(girls,boys);
}
此lambda函数接受两个参数,x和y,然后返回结果为和。lambda函数的语法定义为: [捕捉列表](参数) 修饰符->返回类型{函数体},最简单的lambda函数声明为[]{};
而lambda函数与普通函数最大的区别在于,lambda函数可以通过捕捉列表访问上下文中的数据,以及数据的使用方式(按值传递或者引用传递)
重写上例中的lambda函数: auto totalChild = [girls,&boys]()->int{ return girls+boys;};此时按值传递的方式捕捉变量girls,按引用传递方式捕捉boys。
捕捉项有如下几种形式:
[var]表示按值捕捉变量var
[=]表示按值捕捉所有父作用域(包括this)的变量
[&var]表示按引用方式捕捉变量var
[&]表示引用传递父作用域的变量(this)
[this]表示按值传递方式捕捉当前指针
再次重写上诉lambda表达式:auto totalChild = [=]()->int{return girls + boys;};
此时boys和girls都按值传递了
lambda 与 仿函数
在c++11中,lambda可以视作为仿函数的一种等价形式。
网友评论