lambda函数的作用就是可以编写内嵌的无名函数,而不必写成独立的函数;

结构:[]为开始,(参数){函数体}

例如:

1.

    auto lambdaFun1 = [](int a) {std::cout << "hello world" << std::endl; };    //定义lambdaFun1函数lambdaFun1(1);    //调用lambdaFun1函数

2.可以指明返回类型

在()后采用->,称为拖尾返回类型;

auto lambdaFun2 = [](int a, int b) {return a + b; };int a = lambdaFun2(3, 4);std::cout << a << std::endl;

3.lambda函数可以在其封装的作用域内捕捉变量

float data = 10;auto returnNum = [data] {std::cout << "data : " << data << std::endl; };returnNum();

4。当在外捕捉的变量为const类型的时候,我们想在lambda函数体内改变这个const的值,可以引入mutabl来指明这个const转化为非const变量

    int a = 10;auto returnNum = [a]() mutable {a *= 2; std::cout << "a :" << a << std::endl; };returnNum();std::cout << a << std::endl;

结果是:

a :20
10

注意的是:使用mutable时必须书写();

5.捕捉的方式:

[=] : 表示值捕捉所有的变量

[&] :表示通过引用捕捉所有变量

[&x] : 表示捕捉变量x,而且还是按引用来捕捉的,

[x] : 表示按值捕捉变量x

[=,&x,&y] :表示按值捕捉所有的变量但是除了x和y,以为x和y时按引用捕捉的;

[this] :捕捉周围的对象

6.C++14里规定了lambda函数内部可以自己判断类型auto:

std::vector<int> ints = { 1,2,3,4,5 };std::vector<double> doubles = { 1.2,2.3,3.4,4.5 };auto isGreatThan3 = [](auto i) {return i > 3.4; };auto result = find_if(std::cbegin(ints), std::cend(ints), isGreatThan3);if (result != std::cend(ints)){ std::cout << "find it : " << *result << std::endl;}else{std::cout << "no find " << std::endl;}auto result1 = find_if(std::cbegin(doubles), std::cend(doubles), isGreatThan3);if (result1 != std::cend(doubles)){std::cout << "find it : " << *result1 << std::endl;}else{std::cout << "no find " << std::endl;}

7.std::function 是一个多态的函数模板包装,类似与函数指针,它可以i绑定任意能调用的对象

例如:返回一个double,接收两个整形参数的函数包装定义如下:

  std::function<double(int , int )> myFunction;

  也可以给lambda表达式指定名称,并从函数中返回;

  std::function<int(void)> lambdaName(int x)

  {

    return [x]{return 2*x;};    //这里不能按引用来传递x;

  }

  说明:这个函数主题上时创建了一个lambda表达式,可见lambda接受的参数无,返回的是int类型;

  可以通过下列方式来调用;

  std::function<int(void)> fn = lambdaName(5);

转载于:https://www.cnblogs.com/boost/p/10579199.html

lambda函数详解相关推荐

  1. C++:函数指针进阶(三):Lambda函数详解

    1:Lambda函数语法 C++ 语法的基本格式为: [capture](parameters) -> return_type { /* ... */ } (1) [capture] :[]内为 ...

  2. C++ lambda函数详解

    c++中lambda函数是作为c++11新特新添加到c++中的,其主要是以匿名函数捕获scope内变量的方式构造闭包(closure).相关标准参考:c++ reference 下面以若干不相干的简短 ...

  3. [转载] Python 中reduce()与lambda函数详解

    参考链接: Python中的reduce a = [2,22,222] Sn = reduce(lambda x,y:x+y,a) print "计算和为:",Sn reduce( ...

  4. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

  5. pythonpandas函数详解_对pandas中Series的map函数详解

    Series的map方法可以接受一个函数或含有映射关系的字典型对象. 使用map是一种实现元素级转换以及其他数据清理工作的便捷方式. (DataFrame中对应的是applymap()函数,当然Dat ...

  6. java拉姆达表达式事例,Java Lambda表达式详解和实例

    简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...

  7. python3 内置函数详解

    内置函数详解 abs(x) 返回数字的绝对值,参数可以是整数或浮点数,如果参数是复数,则返回其大小. # 如果参数是复数,则返回其大小.>>> abs(-25) 25>> ...

  8. 匿名函数python_基于python内置函数与匿名函数详解

    内置函数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() d ...

  9. python getattr_Python中的getattr()函数详解:

    标签:Python中的getattr()函数详解: getattr(object, name[, default]) -> value Get a named attribute from an ...

最新文章

  1. Jenkins构建Maven聚合工程,指定构建子模块
  2. linux tf命令,Linux系统命令介绍之vmstat命令详解
  3. 前端模块管理器命令:npm bower
  4. 一起学nRF51xx 3 -  gpiote
  5. TCP、UDP和HTTP详解
  6. 朋友,别告诉我你懂分布式事务!
  7. Lua脚本语法说明(修订)
  8. python中+和join()的区别
  9. 『中级篇』容器网络之host和none(29)
  10. HDU 2588 GCD 【Euler + 暴力技巧】
  11. java动态录音_java实现动态录音,声卡有声音进来就自动录音
  12. css滤镜使文字变3D效果
  13. SQL批量更新 关系表更新
  14. from django.core.context_processors import crsf报错
  15. 局域网屏幕监控软件_掌控局域网监控软件(zklan)
  16. ubuntu关机后自动重启[无法关机]的解决办法
  17. Android深度探索与驱动开发(五)
  18. Python OCR工具pytesseract详解
  19. 如何设置 IntelliJ IDEA 主题和字体
  20. S3C22440 JTAG连接不上

热门文章

  1. SCI写作常用句式总结,帮你迅速提升paper档次
  2. 强化学习AI:它菜了,我慌了
  3. 微软旷视人脸识别100%失灵!照片「隐身衣」,帮你保护照片隐私数据
  4. 微软发布史上最大NLG模型:基于Transformer架构,170亿参数加持
  5. 在AI人工智能时代,大学或需要重新定位
  6. 美国或将限制AI等14类新技术出口,有意针对中国
  7. latex中的引用命令\citep{}和\citet{}
  8. 吵翻了!AI 顶会设置媒体静默期,作者不信邪提前宣传被拒稿,加强盲审是促进公平还是阻止了学术交流?...
  9. 再造一个爱因斯坦?GPT-3 让我看到了名人“重生”的希望
  10. 麻省理工学院的牛人解说数学体系,你到哪个层次了?