C++之Lambda表达式

C++之Lambda表达式

编码文章call10242025-05-15 16:50:2616A+A-

什么是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演示一下吧

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4