一.lambda语法
优点:
1.可以定义简短的函数。
2.使用lambda表达式使代码更紧凑,可读性更好。
语法:
[]
表示不捕获任何变量[this]
表示值传递方式捕捉当前的this
指针[&]
表示引用传递方式捕捉所有父作用域的变量(包括this
)[&var]
表示引用传递捕捉变量var
[=]
表示值传递方式捕获所有父作用域的变量(包括this
)
注意:捕捉列表不允许变量重复传递。
二.lambda表达式工作原理
编译器会把一个Lambda表达式生成一个匿名类的匿名对象,并在类中重载函数调用运算符,实现了一个operator()
方法.
auto print = []{cout << "Hello World!" << endl; };
编译器会把上面的代码翻译为下面的代码:
class print_class
{
public:
void operator()(void) const
{
cout << "Hello World!" << endl;
}
};
// 用构造的类创建对象,print此时就是一个函数对象
auto print = print_class();
三.lambda使用场景
lambda用于std模板库,例如sort,for_each,find_)if,remove_if,多线程场景
lambda作为函数的入参:
using FuncCallback = std::function<void(void)>;
void DataCallback(FuncCallback callback)
{
std::cout << "Start FuncCallback!" << std::endl;
callback();
std::cout << "End FuncCallback!" << std::endl;
}
auto callback_handler = [&](){
std::cout << "This is callback_handler";
};
DataCallback(callback_handler);