C++ Lambda 表达式

     实际工作中,常常看到的c++ Lambda表达式,如何快速理解呢。

1.Lambada 表达式的来源

      来自于函数式编程的概念,有什么优点?

(1)匿名的定义写一个函数,不用再复用函数,也可以让代码更简洁。

(2)使代码更简洁、灵活,在指定地点随写随用。

2.Lambada 表达式的公式

 [capture] (params) opt -> ret {body;};

如何理解?

capture: 其实表示lambada 表达式,对变量使用的权限。

params: 就是代表参数。

opt:是函数选项。

ret: 是返回值。

body:是函数体。

3.如何简洁的套用公式

#include<iostream>
using namespace std;
int main()
{
   auto intMax = [](int x,int y)->int
   {
    return x>y? x:y;
   };

   cout<<"int Max"<<intMax(5,10)<<endl;
}

int Max10

  这是最简单的套用公司,其中求最大值,intMax 是对这个lambada表达式的别名,可通过intMax直接调用 。 

进一步分析capture选项: 

[] :不捕获任何变量

[&]: 按引用的方式,捕获父作用域的变量

[=]:按值传递的方式,捕获父作用域的变量。

[&,=]:拷贝与引用的值互相拷贝。

[var]: 按值传递的方式,捕获变量var

[&var]:按引用的方式,捕获变量&var

[this]:按值传递的方式捕获this指针

[ ] 主要是为了表示lambada表达式可以父作用变量的可访问的权限。

#include<iostream>
using namespace std;
int main()
{
    
   int cur =0;
   int cur2=0; 
   auto intMax = [](int x,int y)->int
   {
    return x>y? x:y;
   };

   cout<<"int Max"<<intMax(5,10)<<endl;

   auto intAdd_1 = [&]() { cur++;cur2++};//按引用访问cur,cur2 lamda
   auto intAdd_2 = [=]() { return cur+1;};// 按值访问,可以访问cur,cur2,cur是拷贝的副本,是右值,不可以cur++,
   auto intAdd_3 = [cur] {return cur+1;};//[var]
   auto intAdd_4=[&cur,cur2]{ cur++;return cur+cur2;}//
}

// [this]  在类的使用中特别好用

#include<iostream>
using namespace std;
#include <iostream>
using namespace std;
 
class Lambda
{
public:
    void sayHello() {
        std::cout << "Hello" << std::endl;
    };

    void lambda() {
        auto function = [this]{ 
            this->sayHello(); 
        };

        function();
    }
};
 
int main()
{
    Lambda demo;
    demo.lambda();
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值