C++之Lambda表达式
什么是Lambda表达式?
C++11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda匿名函数的格式:冒号前是参数,可以有多个参数,用逗号隔开。冒号右边为表达式。Lambda返回值是一个函数的地址,也就是函数对象。
特点
1、从函数命名角度:匿名,直接返回可供调用的值。
2、从输入输出角度:支持多个输入参数,但只支持一个表达式,返回值只有一个。
3、从函数功能角度:结构简单,无需定义函数名。实现功能受限。
4、从访问变量角度:只支持Lambda自定义的变量,不支持外部变量访问。
5、从运行效率角度:Lambda跟函数一样,在调用时仍然在栈空间开辟了一段内存空间。并没有效率上的提升。
作用
1、将Lambda函数赋值给变量:减少函数定义的麻烦,同时支持代码复用
2、将Lambda函数作为参数传递给其他函数
在Lambda表达式内可以访问当前作用域的变量,这是Lambda表达式的闭包(Closure)行为。与JavaScript闭包不同,C++变量传递有传值和传引用的区别。可以通过前面的[]来指定:
[] //没有定义任何变量,使用未定义的变量会引发错误。
[x,&y] //x以传值方式传入,y以引用方式传入。
[&] //任何被使用到的外部变量都隐式地以引用方式加以引用。
[=] //任何被使用到的外部变量都隐式地以传值方式加以引用。
[&,x] //x显式地以传值方式加以引用,其余变量以引用方式加以引用。
[=,&z]//z显式地以引用方式加以引用。其余变量以传值方式加以引用。
需要注意的是对于[=]或[&]的形式,Lambda表达式可以直接使用this指针。但对于[]的形式,如果要使用this指针,必须显式传入:[this](){this->sumBlock();}();
写个小demo演示一下吧