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. lambda函数if_lambda表达式速度如何呢?看完这篇文章你就明白了

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

  4. Java Lambda(语言篇——lambda,方法引用,目标类型,默认方法,函数接口,变量捕获)

    深入理解Java 8 Lambda(语言篇--lambda,方法引用,目标类型和默认方法) 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout ...

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

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

  6. R语言with函数和within函数:with函数基于表达式在dataframe上计算、within函数基于表达式在dataframe上计算并修改原始数据

    R语言with函数和within函数:with函数基于表达式在dataframe上计算.within函数基于表达式在dataframe上计算并修改原始数据 目录

  7. R语言eval函数评估表达式或者字符串实战

    R语言eval函数评估表达式或者字符串实战 目录 R语言eval函数评估表达式或者字符串实战 #基本语法 #eval函数评估表达式

  8. Python语言学习之lambda:lambda函数的简介、使用方法、案例大全之详细攻略

    Python语言学习之lambda:lambda函数的简介.使用方法.案例大全之详细攻略 目录 lambda函数的简介 1.lambda匿名函数的格式 2.lambda函数特点 3.lambda函数与 ...

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

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

最新文章

  1. MIT | 一种可解释的PPI预测模型
  2. 一键让二次元老婆微笑,还能把猫脸变成狗脸,这篇CVPR 论文真有趣
  3. 汇编:OF溢出标志位
  4. node.js学习笔记
  5. 爱情麻辣烫:浓缩了中华美食精华与火锅的精髓
  6. python二进制文件的读取与写入可以分别使用什么方法_用python实现读写文件常见操作方式...
  7. HDU - 6126 Give out candies
  8. input鼠标事件(快捷手册)
  9. 利用python求解度中心性
  10. mapInfo文件格式详解,其中有“细说Mapinfo索引文件*.ind”
  11. android 监听飞行模式,如何在Android上检测飞行模式?
  12. jmeter常见问题总结
  13. 【OJ每日一练】1039 - 阶乘数列和
  14. 关于语音会议自动记录的大概设计思路
  15. Origin:以太坊上的58同城
  16. 计算机e盘丢失了,电脑E盘突然不见了怎么找回_电脑的E盘突然不见了的解决方法...
  17. 类与队列的简单实战爬虫
  18. Unity——写入和读取Json信息的方法
  19. android 飞机大战背景图片,安卓飞机大战(一) 背景移动
  20. 扇贝编程python学习笔记-基础篇10

热门文章

  1. ubuntu 16.0.4 配置 tensorflow-gpu 1.1.0
  2. $NF和 NF的区别
  3. Apache+Openssl
  4. RFID系统集成公司
  5. NEO改进协议提案2(NEP-2)
  6. [工具]各种截图工具和录屏软件
  7. C++设计模式:Template Method
  8. 中国象棋程序的设计与实现(四)-- 一次“流产”的写书计划
  9. 别再说“我已经努力了”,你的“努力”一文不值!
  10. iOS故障排除指南:基本技巧