C++:lambda表达式和函数指针

lambda表达式:

lambda表达式写法:

lambda表达式是C++一种匿名函数的方式,不需要单独命名函数

 //下面是lambda表达式的写法
    [capture clause](parameters) -> return _type
    {
        
           //        capture caluse 捕获的列表,可以为空
          //        parameters 参数列表
         //        return _type 返回值的类型
                                                                                                            
           //中括号中就是函数的表达式 
        
    }

下面是一个实例:

 //下面是一个lambda表达式的案例
    auto add= [](int a,int b)
    {

        return a+b;

    };
    int sum = add(20,30);
    cout<<"两数相加之和为:"<<sum<<endl;

定义了一个add的表达式来接收函数,并且返回a+b;

我们可以直接使用add这个表达式,最后输出两数相加的和

这只是一种匿名函数的表达式的写法,具体应用场景我还没用到过,不过也挺有意思的

lambda表达式捕获列表:

1.中扩号中的:=

代表捕获所有变量,但是不可修改变量的数值

2.中括号中的:&

相当于取变量地址,所有的变量都可以修改再使用

3.指定捕获:

直接写入想要捕获的变量:

函数指针:

1.函数指针的定义方式:

return_type(*p)(parameter_type);

return_type:函数返回类型

p:指针名字

parameter_type:所有参数类型

2.函数指针的调用:

//将一个相加的函数指针作为一个函数的参数
int ADD(int a,int b,bool(*add)(int,int))

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lambda表达式C++11引入的一种函数对象,可以在需要函数对象的地方使用,比如作为函数参数、返回值等。Lambda表达式的语法形式如下: ``` [capture list](parameters) mutable exception -> return type { // function body } ``` 其中,`capture list` 表示捕获列表,用于捕获外部变量。`parameters` 表示函数参数列表,`mutable` 用于表示是否可以修改值传递的变量,`exception` 是异常列表,`return type` 表示返回类型,`function body` 则是函数体。 在Lambda表达式中,可以通过 `[this]` 捕获当前对象的指针,即 `this` 指针,可以方便地访问当前对象的成员变量和成员函数。例如: ``` class MyClass { public: void foo() { int x = 1; auto lambda = [this, x]() mutable { this->m_member_var += x; this->m_member_function(); x++; }; lambda(); } private: int m_member_var; void m_member_function(); }; ``` 在上面的例子中,Lambda表达式通过 `[this, x]` 捕获了当前对象的指针和 `foo()` 函数中定义的变量 `x`。在 Lambda 表达式中可以通过 `this->m_member_var` 和 `this->m_member_function()` 访问当前对象的成员变量和成员函数。由于 `x` 是值传递的,所以在 Lambda 表达式中需要使用 `mutable` 关键字使其可修改,可以通过 `x++` 修改变量的值。最后调用 `lambda()` 执行 Lambda 表达式。 需要注意的是,Lambda表达式捕获 `this` 指针时,需要保证当前对象是有效的,即不能在已经销毁的对象中访问成员变量和成员函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值