一.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,多线程场景文章来源:https://www.toymoban.com/news/detail-420928.html
lambda作为函数的入参:文章来源地址https://www.toymoban.com/news/detail-420928.html
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);
到了这里,关于C11新特性之Lambda表达式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!