Lambda表达式

Lambda表达式用于定义并创建匿名的函数对象,以简化工作。

形式:[函数对象参数 ]( 操作符重载函数参数){ }

    [ ]表示Lambda的开始,不能省略。其中的函数对象参数通常使用=。

  1).[ ]空没有任何使用

  2).[ =]Lambda的函数体内(也就是{ }内)可以使用Lambda所在作用范围内所有可见的局部变量,包括所在类的this。采用值传递的方式,即编辑器按值传递了所有变量

  3).[ &] 表示{ }内可以使用Lambda所在作用范围内所有可见的局部变,包括所在类的this。采用引用的传递方式,即编译器按引用传递了所有局部变量

  4).[ this]函数体内可以使用Lambda所在类中的成员变量

  5).[ i ]将i按值进行传递。按值传递时,在函数体内不能修改传递进来的拷贝,因为默认函数时const的。可以添加mutable修饰符修改传递进来的拷贝。(注意:修改的是拷贝,原值不会发生改变)

6).[&i]将i按引用进行传递

7).[i,&j]将i按值进行传递,j按引用进行传递

8).[=,&i,&j]除i和j按引用进行传递,其他参数都按值进行传递

9).[&,i,j]除i和j按值进行传递,其他参数都按引用进行传递

  ()操作符重载函数参数

标识重载的()的参数,没有参数时,这部分可以省略。参数可以通过按值(i,j)和按引用(&i,&j)两种方式进行传递。

   可修改标示符mutable

mutable声明,可以省略。按值传递函数对象参数时,加上mutable后,可以修改按值传递进来的拷贝(注意是能修改拷贝,而不是值本身)。

int m = 10;

[m] ()mutable {
 m = 100 + 10;     //修改的是拷贝,其本身没有修改
qDebug() << m;
 };

    函数返回值;

用->返回值类型,标识函数返回值的类型。当返回值为void,或者函数体中只有一处return的地方(此时编译器可以自动推断出返回值类型)时,这部分可以省略。

  int i = [ ]( ){return 100;} ( );        //最后一个括号表示调用这个函数, [ ]( ){ }只是函数的说明

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值