Lambda 表达式

Lambda 表达式是 C++11 引入的一种匿名函数的方式,它允许你在需要函数的地方内联地定义函数,而 无需单独命名函数

Lambda 表达式的基本语法如下:

[ capture clause](parameters)->return_type{

        // 函数体

        // 可以使用捕获列表中的变量

        return expression; // 可选的返回语句

};

捕获列表(Capture clause):用于捕获外部变量,在 Lambda 表达式中可以访问这些变量。捕 获列表可以为空,也可以包含变量列表 [var1, var2, ...] 。

参数列表(Parameters):与普通函数的参数列表类似,可以为空或包含参数列表 (param1, param2, ...) 。

返回类型(Return type):Lambda 表达式可以自动推断返回类型auto,也可以显式指定返回类 型 -> return_type 。如果函数体只有一条返回语句,可以省略返回类型。

函数体(Body):Lambda 表达式的函数体,包含需要执行的代码。 

  Lambda 表达式的基本用法:作为一种简洁而快速的方式来定义小型函数。

auto 是 C++11 引入的关键字,用于简化变量的类型声明。它让编译器根据变量的初始值自动推断出变量的类型。这有助于减少代码中的冗长类型声明,提高代码的可读性和可维护性。

auto x = 5; // x 的类型是 int
auto y = 3.14; // y 的类型是 double

#include <iostream>
using namespace std;
int main()
{
    int x = 20;
    int y = 10;
//定义一个简单的lambda
    auto add = [](int a,int b)->int {
        return a+b;
    };
    int ret = add(x,y);

    cout<<ret<<endl;

    return 0;
}

回调函数:

指一种将函数作为参数传递给另一个函数的编程技术,函数作为参数传递

#include <iostream>


using namespace std;

bool myCompare(int a,int b){
    return a>b;
}

int getMax(int a,int b,bool (*compare)(int ,int )){
    if(compare(a,b)){
        return a;
    }else {
        return b;
    }
}
int main()
{
    int x = 20;
    int y = 10;


    int ret = getMax(x,y,&myCompare);

    cout<<ret<<endl;

    return 0;
}

使用匿名 Lambda 函数来返回两个数中的较大数

#include <iostream>


using namespace std;



int getMax(int a,int b,bool (*compare)(int ,int )){
    if(compare(a,b)){
        return a;
    }else {
        return b;
    }
}
int main()
{
    int x = 20;
    int y = 70;


    int ret = getMax(x,y,[](int a,int b)->bool{
            return a>b;
    });

    cout<< "the large num is:" <<ret<<endl;

    return 0;
}

捕获列表(3种)

#include <iostream>


using namespace std;


int main()
{
    int x = 10;
    int y = 20;
    int z = 5;
    auto add = [x,y]()->int{  //捕获x,y变量,无法修改,只能读
        return x+y;
    };
    int ret = add();
    cout<<ret<<endl;


    auto mul= [=]()->int{  //捕获所有变量,无法修改,只能读
        return x*y*z;
    };
    ret = mul();
    cout<<ret<<endl;

    //引用的方式来捕获, 
    auto modfyandMUL = [&]()->int{  //捕获的变量可以修改
      x = 15;
      return x*y*z;
    };
    ret = modfyandMUL();
    cout<<ret<<endl;
    
    
    return 0;
}

第一个 Lambda 表达式 ret按值捕获了 x 和 y (即它们的副本)。这意味着 ret内的 x 和 y 是在 Lambda 定义时的值的拷贝。

第二个 Lambda 表达式 multiply 使用 [=] 捕获列表,这表示它按值捕获所有外部变量

第三个 Lambda 表达式 modifyAndSum 使用 [&] 捕获列表,这表示它按引用捕获所有外部变量。 因此,它可以修改 x 和 y 的原始值。

 概述了 Lambda 函数和内联函数在 C++ 中的相似之处和区别:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值