首页 > 编程知识 正文

牙式表达方法解,常式句的表达效果

时间:2023-05-06 15:23:23 阅读:260618 作者:1343

1.lambda表达式

   C++11引入了Lambda表达式。Lambda表达式的引入,方便了简短函数的定义,为常用的一次性函数的定义和使用提供了很大的便利。

   Lambda表达式实际上是一种匿名函数定义,常用来定义简单和不重复使用的函数。其可使用的外部变量、定义方式等都与常规函数有所不同。

auto f = [捕获参数列表](函数参数列表) mutable throw(类型)->返回值类型 {函数语句};

Lambda表达式的定义结构分为六个部分:

函数对象参数部分,Lambda表达式的引入部分,用于初始化Lambda表达式,其中[]中可以填入一些标识来指示Lambda表达式如何捕获可以访问的变量。Lambda表达式可以捕获的变量只限于在Lambda表达式定义位置之前出现的变量。标识的放置有以下几种方式:
空白表示不使用任何参数,仅可使用形参列表中的参数。
=(等号),表示使用的变量以值传递的方式捕获,可以直接使用this指针,不再需要显式列举this。
&(与号),表示使用的变量以引用传递的方式捕获,可以直接使用this指针,不在需要显示列举this。
this,表示Lambda表达式可以使用所在类中的成员变量。
变量名,表示在Lambda表达式中,该变量使用以值传递的方式捕获。
&变量名,表示在Lambda表达式中,该变量使用以引用传递的方式捕获。
组合方式,以逗号分隔各个捕获标识,特殊标识的变量按照特殊方式捕获,其余按照默认的标识进行捕获,例如[=, &a, &b]表示a与b两个变量按引用捕获,其余变量按值捕获。
函数参数列表与常规函数定义中的形参列表相同。
mutable关键字,表示可以修改按值传入的变量的副本(不是值本身),类似于不带const关键字的形参。使用mutable关键字后对按值传入的变量进行的修改,不会将改变传递到Lambda表达式之外。
throw(类型)表达式,表示Lambda表达式可以抛出指定类型的异常。
->返回值类型,指示Lambda表达式定义的匿名函数的返回值类型。
函数语句,跟常规函数的函数语句相同,如果指定了函数的返回值类型,函数实现语句中一定需要return来返回相应的类型的值。

2.mutable属性的作用

   当捕获列表以值的方式传递后,lambda表示不能修改这个变量的值,只能使用。

    但是函数内部想修改这变量,但是又不想影响lambda表达式外面的值的时候,就直接添加mutable属性,这样调用lambda表达式的时候,会像函数传递参数一样,在内部定义一个变量并拷贝这个值。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。