> 文章列表 > C11新特性之Lambda表达式

C11新特性之Lambda表达式

C11新特性之Lambda表达式

一.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);