C++11之前,不能在一个函数里面再定义一个函数,C++11引入了lambda函数的概念,可以在一个函数内部定义局部函数:
#include#include using namespace std; int main(){ vector a = {1, 2, 3, 4}; vector b = {5, 6, 7, 8}; auto p=[](vector & d){ //定义一个lambda函数 for(auto i : d) { cout< lambda函数的声明:
[capture](parameters)mutable->return-type{statement}
- [capture]:捕获列表,用于描述lambda函数可以使用父作用域(包含lambda函数的块作用域)的自由变量(必须是自由变量)的范围和方式:
[var] 以传值的方式捕获父作用的变量var(由于是传值,相当于在定义lambda函数的时候完成捕获 ,生成了var的常量拷贝,因此后续无法改变) [=] 以传值的方式捕获父作用域的所有变量(保护this) [&var] 以引用的方式捕获父作用域的变量var(由于是引用,var的值会随着父作用域内的var的变化而变化,并且可以在lambda函数内,对var进行写操作) [&] 以引用的方式捕获父作用域的所有变量(保护this) [this] 以传值的方式捕获父作用域的this指针
- (parameters):参数列表,与普通函数一样,如果没有可以省略
- mutable:lambda函数默认是个const函数,通过mutable修饰符,可以消除函数const属性
- return-type:返回值类型,如果可以被自动推导出来,那么可以省略
- {statement}:函数体,跟普通函数一样
#include#include using namespace std; int main(){ vector a = {1, 2, 3, 4}; auto pV=[a]{ //以传值的方式捕获a for(auto i : a) { cout<



