lambda表达式是c++ 11的重要且常用特性。
使用lambda表达式有诸多好处:
1.就地匿名定义目标函数或函数对象,在关注函数实现的场景下不用费力气给函数起名和在别处定义,具有很好的可读性和可维护性;
2.简洁,让使用者聚焦于解决核心问题;
3.实现功能闭包。
格式
[capture] {params} opt-> ret { body;};
如果返回值可以推导获得,可省略,没有参数,()也可省略,最简单的格式[capture]{body};
例子:
auto f = [](int a) ->int { return a+1; };
std::cout << f(1) << std::endl; //输出2
这里 自动推导 f 的类型,因为没有捕获 所以 f 可以只是个函数指针, 如果有捕获,f是一个函数对象。
就我自己在开发中使用lambda最多的两个地方:
其一是用做Qt的槽函数,尤其是在需要捕获变量或者要连续发信号的场景,用lambda很方便。有一个需要注意的地方是,如果捕获指针,在槽函数调用时这个指针所指向的内存可能已经释放了。
另外一个地方就是用std::sort对自定义类型排序时,用lambda实现仿函数,实现功能闭包也有很好的可读性和可维护性。



