C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。

Lambda 表达式把函数看作对象。Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。

Lambda 表达式本质上与函数声明非常类似。Lambda 表达式具体形式如下:

[capture](parameters)->return-type{body}

例如:

[](int x, int y){ return x < y ; }

如果没有返回值可以表示为:

[capture](parameters){body}

例如:

[]{ ++global_x; } 

在一个更为复杂的例子中,返回类型可以被明确的指定如下:

[](int x, int y) -> int { int z = x + y; return z + x; }

本例中,一个临时的参数 z 被创建用来存储中间结果。如同一般的函数,z 的值不会保留到下一次该不具名函数再次被调用时。

如果 lambda 函数没有传回值(例如 void),其返回类型可被完全忽略。

在Lambda表达式内可以访问当前作用域的变量,这是Lambda表达式的闭包(Closure)行为。 与JavaScript闭包不同,C++变量传递有传值和传引用的区别。可以通过前面的[]来指定:

[]      // 沒有定义任何变量。使用未定义变量会引发错误。
[x, &y] // x以传值方式传入(默认),y以引用方式传入。
[&]     // 任何被使用到的外部变量都隐式地以引用方式加以引用。
[=]     // 任何被使用到的外部变量都隐式地以传值方式加以引用。
[&, x]  // x显式地以传值方式加以引用。其余变量以引用方式加以引用。
[=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。

另外有一点需要注意。对于[=]或[&]的形式,lambda 表达式可以直接使用 this 指针。但是,对于[]的形式,如果要使用 this 指针,必须显式传入:

[this]() { this->someFunc(); }();

C++编程语言之Lambda 函数与表达式相关推荐

  1. C++编程语言之Lambda函数与表达式

    C++编程语言之Lambda函数与表达式 C++编程语言之Lambda函数与表达式

  2. C++语言之Lambda函数与表达式

    C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式). Lambda 表达式把函数看作对象.Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参 ...

  3. _编程语言_C++_Lambda函数与表达式

    C++11提供了对匿名函数的支持,称为Lambda表达式函数 Lambda 表达式把函数看作对象.Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值 ...

  4. lambda函数if_lambda表达式速度如何呢?看完这篇文章你就明白了

    虽然Java 8已经出了好几年了,但是很多朋友可能对于其中的一些特性还是不太了解.甚至对lambda表达式这个特性可能会产生误解,误认为lambda表达式会影响程序的速度.其中也不乏很多误人子弟的自媒 ...

  5. 用 C 语言开发一门编程语言 — 基于 Lambda 表达式的函数设计

    目录 文章目录 目录 前文列表 函数 Lambda 表达式 函数设计 函数的存储 实现 Lambda 函数 函数的运行环境 函数调用 可变长的函数参数 源代码 前文列表 <用 C 语言开发一门编 ...

  6. lambda函数if_Python3中lambda表达式与函数式编程讲解

    今天小编就为大家分享一篇关于Python3中lambda表达式与函数式编程讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 简单来说,编程中提到的 lam ...

  7. 【学习笔记】36、lambda是单表达式函数

    lambda是单表达式函数 一.lambda的定义 Python中的lambda关键字可用来快速声明小型匿名函数.lambda函数的行为与使用def关键字声明的常规函数一样,可以用于所有需要函数对象的 ...

  8. C#中Lambda表达式类型Expression不接受lambda函数

    在EF Core中我们经常会用System.Linq.Expressions系统命名空间的Expression<TDelegate>类型来作为EF Core的查询条件,比如: using ...

  9. python key=lambda函数_使用’key’和lambda表达式的python max函数

    我来自OOP背景,尝试学习Python.我使用的是max函数,该函数使用lambda表达式返回Player类型的实例,其中players列表中的totalScore最大. def winner(): ...

最新文章

  1. shp文件导入Oracle并发布到Geoserver
  2. 参加web前端培训需要注意什么
  3. 装机人员工具_吕梁采购气伏式包装机-哪家好-强盛包装机械
  4. Silverlight中使用动画的技巧
  5. c语言 自动化办公,办公自动化快捷键大全
  6. as, idea 出现 Gradle's dependency cache may be corrupt 错误分析
  7. 力扣-1232 缀点成线
  8. linux内存测试工具memtest,linux内存测试工具memtester使用
  9. ArcMap10 批量等距离分割线段
  10. Vivado初次使用教程
  11. 如何做中台战略分析模型?
  12. 算法导论 25.3 Johnson算法
  13. Python实现图形界面猜数字游戏(GUI)
  14. 生成地球人申请表、逍遥游pdf
  15. 九型人格:三、The proformer 实干者 - 我若没有成就,就没有人会爱我。
  16. php微信里面换行符,如何在字符串中间加换行符js微信小程序实现人脸识别
  17. 软件测试基础 (二): 集成测试
  18. Hyper-V配置ubuntu网络(无线有限均可)
  19. php 2038,php处理大于2038年以后日期的一种方法
  20. 高云FPGA系列教程(基于GW1NSR-4C TangNano 4K开发板)

热门文章

  1. 关于node-sass安装失败的解决办法
  2. assertThat的使用方法
  3. JDBC与ORM发展与联系 JDBC简介(九)
  4. 封装高可复用的服务端响应SSC程序修复对象 --ServerResponse
  5. JDK10都发布了,nio你了解多少?
  6. 通过域名,直接访问到网站主页
  7. Java Web之SpringMVC 进行数据回显
  8. Flash中如何使用滤镜
  9. 基于python的图形化邮件发送程序(支持添加附件)
  10. ELK Stack 日志分析 Elasticsearch搜索权限