lambda表达式 |
您所在的位置:网站首页 › 匿名函数是一类无需定义________的函数 › lambda表达式 |
在调用一些函数的时需要将另一个函数作为参数传入,这些函数只能有一个参数(一元谓词)或两个参数(二元谓词),但是有的时候我们需要更多的参数传入这个函数,这时候我们就可以使用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 |