【FX】C/C++_Lambda表达式

[复制链接]
查看600 | 回复4 | 2021-8-28 23:19:21 | 显示全部楼层 |阅读模式


Lambda是C++11特性,用于创建匿名函数,匿名函数即只拥有函数体,但是没有函数名。

你可以把他理解为一小段代码,但是又不需要像函数哪有,执行函数现场保护。

推出这种表达式主要目的是为了解决一次性函数,如当我们在编写一段代码想要处理某些事情得时候,我们需要编写一段代码,其中有一段代码下面是要可以复用的,但是它只限于当前函数使用,一次性的函数,如果为其单独编写一个函数未免有些浪费资源,和编写一些无用代码,但是不写的话,下面又要重写一段与上面一样的代码。

这个时候,Lambda就诞生了,在这种情况下我们可以使用Lambda表达式来完成复用代码,编写一次性的函数。
先看一下Lambda表达式原型:

[捕获方式] (参数)  {函数体}
首先介绍一下捕获方式:[太阳]一楼
参数:

参数,像普通函数那样定义你的参数就可以了。

函数体:

在函数体里可以随意编写代码。

值得一提的是,lambda不能访问超过所在区域的变量,如lambda在函数体里,那么它不能访问全局变量,换句话说,如果它在全局里,它可以访问全局变量,但不能访问别的函数体里的局部变量,其次是它不能引用静态变量,因为静态变量不属于局部变量。

其次是,lambda使用=传递时,会创建变量的副本(需要额外的栈空间),但是是const类型的,如果你修改它的值但是不会危险到原本变量里的值。
这是一段例子:[太阳]二楼
输出结果为0,如果你的Lambda表达式里无需参数,那么在使用时,不要加上(),否则会报错。

同时如果没有参数的话,表达式里的参数()可以放到末尾

如果有参数的情况下不行:[太阳]三楼
输出为“10”

使用引用的情况下是可以修改值的:[太阳]四楼
输出20

但是引用传递的是副本,切记是副本!!不会改变其本身值:[太阳]五楼
输出:

20

10

当然你也可以使用函数指针来指向它,依然是合法的:[太阳]六楼
补充:

在类的内部使用"&"或者“=”方式捕获是可以捕获成员变量的

其次lambda表达式是可以用在QT的参数上的。

注意这种写法仅限于QT5,在QT5时,QT的开发者们新增了connect的重载函数,且让编译器支持了使用lambda用于参数。

如:[太阳]七楼
当然更直观可以这样写:[太阳]八楼
connect也支持函数指针的写法
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
天镜盗梦 | 2021-8-30 09:28:32 | 显示全部楼层
顶顶更健康
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

千面萌萌 | 2021-8-30 11:19:50 | 显示全部楼层
向楼主学习
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

yichong | 2021-8-31 11:02:05 | 显示全部楼层
看帖要回,回帖才健康,在踩踩,楼主辛苦了!
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

半度微凉 | 2021-9-3 18:44:50 | 显示全部楼层
我是个凑数的。。。
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则