表达式的语法
捕获列表:要把什么东西拿到函数体里去用,从外界捕获
auto func1/*函数名*/ = [/*捕获列表*/][/*函数参数*/]->void/*返回值*/ {
/*函数体*/
};
auto add =[](int a, int b)->int {
return a + b;
};
使用1
lambda传给函数指针(函数名就是函数指针)
C语言中:
只支持捕获列表为空的lambda表达式
#include <iostream>
// C语言中的函数指针类型
int funcLam(int a, void(*pre)(), void(*post)()) {
pre();
std::cout << "zhongjian" << std::endl;
post();
return 0;
}
int main(int argc, const char * argv[]) {
funcLam(1, [](){std::cout << "pre" << std::endl;}, [](){std::cout << "post";});
return 0;
}
C++11以后使用STL std::function<函数指针类型>
std::function可以向下兼容C函数指针
#include <iostream>
#include <functional>
int funcLam(int a, std::function<void()> pre, std::function<void()> post) {
pre();
std::cout << "zhongjian" << std::endl;
post();
return 0;
}
int main(int argc, const char * argv[]) {
funcLam(1, [](){std::cout << "pre" << std::endl;}, [](){std::cout << "post";});
return 0;
}