Lambda表达式(Lambda)是C++编程中的游戏规则改变者。这有点令人惊讶,因为它们并没有给语言带来新的表达能力。Lambda所能做的所有事情都是您可以手动完成的,只需再多输入一点即可。但是用Lambda来创建函数对象实在是太方便了,这对日常C++软件开发的影响是巨大的。STL“_if”算法(例如,std::find_if、std::remove_if、std::count_if等),比较函数(例如,std::sort、std::nth_element、std::lower_bound等)用Lambda作参数毫无压力。在STL之外,Lambda使快速创建std::unique_ptr和std::shared_ptr的自定义删除器成为可能,并且它们也能使线程API中条件变量简单明了。除了标准库之外,Lambda还为一次性调用的回调函数、接口适应函数和上下文相关函数的动态规范提供了便利。Lambda确实使c++成为一种更令人愉快的编程语言。
31.不要使用全局捕获模式
理由: 全局引用捕获可能会造成悬空指针, 全局的值捕获误导我们lambda是自包含的, 实际上不一定。
32.用初始化捕获把对象移到闭包中
1 2 3 4 5 6
   | auto pw = std::make_unique<Widget>();
  auto func = [pw = std::move(pw)] {    }
   | 
 
1 2 3 4
   | auto func = [pw = std::make_unique<Widget>()] {    }
   | 
 
33.用std::forward传递参数, 用decltype推导auto&&参数类型
1 2
   | auto f = [](auto&& x) { return normalize(std::forward<decltype(x)>(x)); };
   | 
 
1 2
   | auto f = [](auto&&... x) { return normalize(std::forward<decltype(x)>(x)...); };
   | 
 
思考, 把套路用宏定义一下是不是更方便?
1
   | #define FORWARD(x) std::forward<decltype(x)>(x)
   | 
 
34. 优先用lambda代替std::bind
第五条款说过了