Lambda函数

2019-01-06  本文已影响0人  食梦狸猫

一个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可以视作为仿函数的一种等价形式。

上一篇下一篇

猜你喜欢

热点阅读