C++11 lamda 匿名函数

lamda函数:一个可调用的代码单元,可理解为一个未命名的内联函数。

既然是函数,那么定义就和函数类似了,一个返回类型,一个参数列表,一个函数体,多了一个捕获列表

[捕获列表](参数列表) -> 返回类型 { 函数体;}

其中:捕获列表和函数体是必不可少的,捕获列表不为空指的是'[]'不为空,里面的捕获值通常为空

例:

auto f = [] {return 1;}

1.捕获列表:

[]

空捕获列表,不能使用所在函数的

变量

[name1,name2,name3,...]

值捕获方式,即以值拷贝的方式

捕获函数中的变量,如果有'&'则是

引用捕获

[&]所有来自函数的实体都以引用捕获方式
[=]所有来自函数的实体都以值捕获方式
[&,name1,name2,...]

name1,name2等以值捕获,其它的隐式捕获的

变量采用引用捕获方式

[=,&name1,&name2,...]

name1,name2等采用引用捕获,其它的隐式

捕获为值捕获

 

 

 

 

 

 

 

 

 

2.参数列表

太困了。。。下次再写

 

c++ 11引入了lambda表达式,它可以看成是一般函数的函数名被略去,返回值使用了一个 "->" 的形式表示。lambda函数带有捕获列表,表示可以在函数体内访问外部的变量。如果捕获列表为空,lambda函数不能使用所在函数中的变量。 lambda函数的使用可以通过函数指针进行转换,但是要求lambda函数没有捕捉到任何变量,并且函数指针所示的函数原型必须和lambda函数有着相同的调用方式。然而,C++11不允许将函数指针转换为lambda函数。 以下是对lambda函数的一些示例代码: 在test01函数中,定义了一个lambda函数Add,它接受两个参数a和b,并返回它们的和。lambda函数被赋值给一个auto类型的变量Add,并通过Add(1, 2)进行调用。 在test07函数中,定义了一个lambda函数Add,它没有返回值。在lambda函数中,试图输出在所在函数中的变量c和d,但由于捕获列表为空,导致编译报错。 在main函数中,使用typedef定义了函数指针类型allChild和oneChild。通过lambda函数totalChild向函数指针p进行转换,因为totalChild没有捕捉到任何变量。但是尝试将totalChild转换给函数指针q会导致编译错误。使用decltype函数可以获取lambda函数的类型,可以将totalChild赋值给allPeople,但是将p赋值给totalPeople会导致编译错误。 总结来说,lambda函数是一种便捷的定义匿名函数的方式,可以通过函数指针进行转换。但在转换过程中要注意捕捉列表和函数原型的要求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C++匿名函数lambda详解](https://blog.csdn.net/Long_xu/article/details/127869979)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [C++11之lambda函数](https://blog.csdn.net/liujun3512159/article/details/122184455)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值