lambda表达式

您所在的位置:网站首页 匿名函数是一类无需定义________的函数 lambda表达式

lambda表达式

#lambda表达式| 来源: 网络整理| 查看: 265

在调用一些函数的时需要将另一个函数作为参数传入,这些函数只能有一个参数(一元谓词)或两个参数(二元谓词),但是有的时候我们需要更多的参数传入这个函数,这时候我们就可以使用lambda表达式来避免这个问题。

目录

一、lambda表达式

二、捕获

1.值捕获

2.引用捕获 

3.隐式捕获

4.可变lambda

三、指定返回类型

一、lambda表达式

一个lambda表达式表示一个可调用的代码单元,我们可以将其理解为一个没有函数名的内联函数。

参数列表和返回类型是可忽略的,但是捕获列表和函数体不可忽略。 

int num = 10; auto n = [num] {return num; };//注意{ }内是一个函数,所以需要加上;

捕获列表可以捕获lambda表达式所在函数内部的变量 ,此时lambda表达式捕获了上面num的值,并将num作为返回值使得n的值等于num。

vector v{ 3,1,4,6,2,2 }; sort(v.begin(), v.end(), [](int a, int b) {return a < b; });

所需要的a,b在函数中不存在,而是从由sort函数在v中传过去,所以用参数列表而不是捕获列表。

二、捕获

在捕获迭代器/指针或是引用捕获得时候,需要注意捕获对象是存在的。

1.值捕获

与传值拷贝类似,都是对变量进行拷贝,但是与其不同的是,捕获得变量是在lambda创建时拷贝,而非调用时拷贝,因此之后的修改并不会影响到lambda内部对应的值。

int a = 10; auto n = [a] { return a; }; a++; cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3