C++11:Lambda表达式

       C++11的一大亮点就是引入了Lambda表达式。利用Lambda表达式,可以方便的定义和创建匿名函数。

声明Lambda表达式

Lambda表达式完整的声明格式如下:

[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:函数体

      Lambda表达式实际上就是提供一下类似匿名函数的特性,而匿名函数是在需要一个函数,但是又不想费力去命名一个函数的情况下去使用的。

所谓捕获列表,其实可以理解为参数的一种类型,lambda表达式内部函数体在默认情况下是不能够使用函数体外部的变量的,这时候捕获列表可以起到传递外部数据的作用。

#include <functional>   //std::function的头文件
#include <iostream>

int foo(int para)
{
    return para;
}


int main()
{
    std::function<int(int)> func = foo;
    int important = 100;

    //lambda表达式
    std::function<int(int)> func2 = [&](int value) -> int {
    return 1+value+important;
    };

    std::cout << func(10)<<std::endl;
    std::cout << func2(10)<<std::endl;
}

输出结果:

10
111

func(10)的结果很容易理解,但是func2(10)呢?

//lambda表达式
int important = 100;
std::function<int(int)> func2 = [&](int value) -> int {
    return 1+value+important;
};

捕获列表中的&相当于直接将important传入lambda表达式中,value作为形参传入,对于func2(10)来说,value=10,所以,func2(10)的结果为111。

参考:C++ 11 Lambda表达式 - 滴水瓦 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值