使用lambda表达式时,要显示地指明捕获列表。
lambda表达式可以捕获静态变量,并且指涉到的是那个静态变量的全局唯一存储位置。
初始化捕获
class Widget {public:bool isValide();private:};int main(){auto pw = make_unique<Widget>();// do some work with *pwauto f = [pw = move(pw)](){return pw->isValide();};return 0;}
在lambda表达式的捕获列表中可以使用pw = move(pw)进行初始化捕获。这里等号左右的pw 作用域不同。左侧pw 的作用域位于lambda表达式的闭包内,而右侧pw 的作用域则与lambda表达式定义处相同(main函数)。
默认的捕获只有复制和引用2种,c++14中支持的初始化捕获式允许了任意形式的捕获(这里是将对象移入lambda的闭包)。
匿名函数形式的完美转发
auto f = [](auto&& x) {func(forward<decltype(x)>(x));};
decltype可以推断出x是左值还是右值。
