您的位置:首页 > 健康 > 美食 > Lambda 表达式

Lambda 表达式

2025/1/7 17:58:20 来源:https://blog.csdn.net/qq_65305227/article/details/141115063  浏览:    关键词: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;
//定义一个简单的lambdaauto 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++ 中的相似之处和区别:

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com