lambda表达式

C+++11中,用lambda表达式来定义并创建匿名的函数对象,即没有函数名的函数;

1.完整格式:

[capture list] (params list) mutable exception-> return type { function body }

各项具体含义如下

(1)capture list:捕获外部变量列表

(2)params list:形参列表(可缺省)

(3)mutable指示符:用来说用是否可以修改捕获的变量(可缺省)

(4)exception:异常设定(可缺省)

(5)return type:返回类型(可缺省)

(6)function body:函数体

2.应用举例

[=](int a, long b) mutable exception -> int {
    if(a==2)
        return 0;
    else
        return 1;
}
int a=100;
auto f = [a]()mutable { std::cout << ++a; };
//lambda表达式
connect(b1,&QPushButton::released,this,
[=]()
{
        b2->setText("lambda");
}
);

3.使用情景:

在函数体较短,不想再添加一个新的函数(声明和成员函数)来供当前位置调用的情况下,可以使用lambda表达式,提供方便。

4.说明:

【Lambda表达式的本质是“匿名方法”,即当编译我们的程序代码时,“编译器”会自动将“Lambda表达式”转换为“匿名方法”】

(1)捕获的变量将不会被作为垃圾回收,直至引用变量的委托超出范围为止。

(2)Lambda 表达式无法从封闭方法中直接捕获 ref 或 out 参数。

(3)Lambda 表达式中的返回语句不会导致封闭方法返回。

(4)Lambda 表达式不能包含其目标位于所包含匿名函数主体外部或内部的 goto 语句、break 语句或 continue 语句。

(5)如果“语句或语句块”有返回值时,如果只有一条语句则可以不输写“return”语句,编译器会自动处理,否则必须加上。

(6)如果捕获的变量在函数体中被修改,应在表达式构成中加上 mutable 关键字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值