当前位置: 首页 > 科技观察

C++中的Lambda表达式快速指南

时间:2023-03-16 15:46:56 科技观察

编程语言在不断发展,甚至像C++这样的语言也很早就确立了自己的地位。他们向标准库添加功能并进行其他更改以简化程序员在动态域中的工作。作为语言发展带来的更新的一部分,C++在其2011版本中添加了对lambda表达式的支持。什么是lambda表达式,作为C++程序员,您如何利用它们发挥自己的优势?什么是Lambda表达式?Lambda表达式也称为lambda函数。它是一个内联表达式,可以接受参数、执行操作并返回一个值,就像典型的函数一样。您可以在另一个函数中使用lambda并将其分配给变量。Lamba函数是在程序中定义匿名函数对象的有用方法。几乎每种语言都支持lambda,尽管每个实现各不相同。C++Lambda表达式由哪些部分组成?Lambda表达式在C++中很容易使用。你可以分解C++中lambda表达式的语法,如下所示:[capture_clause](parameters)options{expression_body;}例如:intval=13;autosumPlusVal=[val](inta,intb)mutablenoexcept?>int{returnval+a+b;};sumPlusVal(2,5);//20此代码将sumPlusVal变量声明为auto,因为lambda表达式可以接受和返回任何数据类型。这让编译器在编译期间确定类型。从上面的代码中,您可以看到lambda表达式有几个部分指定它的操作方式。下面是每个组件的快速概述。捕获子句:这是lambda表达式的第一部分,您可以在其中指定预先存在的变量或定义要在表达式主体中使用的新变量。有不同的方式来指定捕获,例如:autoaddTwo=[foo](){returnfoo+2;};//按值autoaddThree=[&bar](){returnbar+3;};//通过引用autoaddAllVal=[=](){returnfoo+bar;};//全部按值autoaddAllRef=[&](){returnfoo+bar;};//全部通过引用//在捕获子句中创建一个变量autocreateVarInCapture=[fooBar=foo+bar](){returnfooBar*5;};//没有捕获-返回错误,因为foo不可访问autoerrorExpression=[](){returnfoo+2;};Parameters(Parameters):lambda表达式的这部分也是可选的。它包含lambda所需的函数参数。这与您在C++中定义函数参数的通常方式没有什么不同。选项:您还可以在定义lambda表达式时指定选项。您可以使用的一些选项是:mutable、exception(例如第一个示例代码中的noexcept)、->return_type(例如->int)、requires、attributes等。经常使用mutable选项,因为它允许捕获lambda内部进行修改。下面的代码演示了这一点。整数值=10;//返回错误-值是表达式中的常量autodecrement=[value](){return--value;};autoincrement=[value]()mutable{return++value;};增量();//11虽然其他选项很少使用,但您可以在cppreference.com上的lambdas页面上获得有关它们的更多信息。表达式主体:这是lambda表达式的主体,它执行并返回一个值,就像函数一样。如有必要,您可以将lambda表达式的主体拆分为多行。但是,最佳做法是尽可能短以防止代码混乱。Lambda表达式有什么好处?在代码中使用lambda函数有很多优点。除了提高开发速度和效率之外,您从lambda中获得的最大好处如下:Lambda表达式有助于保持代码整洁。保持代码简单和干净的最佳方法之一是尽可能使用lambda。这对于维护可读和可重用的代码结构非常有帮助。您可以将lambda作为参数传递给其他函数。C++标准库的std::sort()方法利用了这一点。您可以将lambda作为此方法的参数之一传递,以指定函数应如何执行排序。例如:std::vectorarr={2,5,1,3,4};std::sort(arr.begin(),arr.end(),[](inta,intb){returnausingnamespacestd;intmain(){//定义一个可重用的lambdaautoaddUp=[](autoa,autob,autoc)noexcept{cout<<"Nowaddingup..."<