C++ Lamda表达式

本文介绍了C++的Lambda表达式,它类似于JavaScript中的闭包,用于创建匿名函数对象。主要内容包括Lambda的语法、变量捕获选项及其效果,并通过实例展示了不同捕获方式的运用。此外,还探讨了Lambda表达式的内部实现,以及对静态变量的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. Lamda表达式作用:
    Lambda表达式类似Javascript中的闭包,它可以用于创建并定义匿名的函数对象,以简化编程工作。
  2. Lambda的语法如下:
    [函数对象参数](操作符重载函数参数)->返回值类型{函数体}
vector<int> iv{
   5, 4, 3, 2, 1};  
int a = 2, b = 1;  
int foo = 3;
 
for_each(iv.begin(), iv.end(), [b](int &x){
   cout<<(x + b)<<endl;}); // (1)  
 
for_each(iv.begin(), iv.end(), [=](int &x){
   x *= (a + b);});     // (2)  
 
for_each(iv.begin(), iv.end(), [=](int &x)->int{
   return x * (a + b);});// (3) 

• []内的参数指的是Lambda表达式可以取得的全局变量。
(1)函数中的b就是指函数可以得到在Lambda表达式外的全局变量,如果在[]中传入=的话,即是可以取得所有的外部变量,如(2)和(3) Lambda表达式
• ()内的参数是每次调用函数时传入的参数。
• ->后加上的是Lambda表达式返回值的类型,如(3)中返回了一个int类型的变量
• 下面是各种变量捕获的选项
o [] 不捕获任何变量
o [&} 捕获外部作用域中所有变量,并作为引用在函数体中使用
o [=] 捕获外部作用域中所有变量,并拷贝一份在函数体中使用
o [=, &b] 捕获外部作用域中所有变量,并拷贝一份在函数体中使用,但是对b变量使用引用
o [b] 捕获b变量并且拷贝一份在函数体使用,同时不捕获其他变量
o [this] 捕获当前类中的this指针。如果已经使用了&或者=就默认添加此选项。
小结: Lamda 表达式主要用于创建匿名的函数对象,简化编码。最重要的就是[函数对象参数] 的使用。对于上面各种变量捕获的选项,需要熟记。
下面给出一些样例:

  • [] 不捕获任何变量
std::vector<int> tempVec{
   1, 2, 3, 4, 5};
int a = 8;
int b = 2;
for_each(tempVec.begin(), tempVec.end(<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值