lambda被用来表示一种匿名函数,这种匿名函数代表了一种所谓的lambda calculus。以lambda概念为基础的”函数式编程“是与命令式编程、面向对象编程等并列的一种编程范型。

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

其中,

  • [capture] :捕捉列表,[]是lambda引出符,编译器根据该引出符判断接下来的代码是否是lambda函数。捕捉列表用于捕捉父域中的变量以供lambda函数使用,捕捉列表可以由多个项组成,用","分割。[var]表示以值传递方式捕捉父域中的变量var,[=]表示以值传递方式捕捉父域中的所有变量(包括this),[&var]表示以引用传递方式捕捉父域中的变量var,[&]表示以引用传递方式捕捉父域中的所有变量(包括this),[this]表示以值传递方式捕捉当前的this指针。
  • (parameters):参数列表,与普通函数的参数列表一致,如果不需要参数传递,则可以连同括号()一起省略。
  • mutable: mutable修饰符,默认情况下,lambda函数总是一个const函数,mutable可以取消其常量性。在使用该修饰符时,参数列表不可省略(即使参数为空)。
  • ->return-type: 返回类型,用追踪返回类型形式声明函数的返回类型,不需要返回值的时候可以连同符号->一起省略。在返回类型明确的情况下,也可以省略该部分,让编译器对返回类型进行推导。
  • {statement}: 函数体,内容与普通函数一样,不过除了可以使用参数之外,还可以使用所有捕获的变量。

注意:

#include <iostream>int main()
{int a = 3;int b = 4;int c = 5;auto fun = [=, &b](int c) ->int {return b += a + c;};std::cout << "fun ret=" << fun(c) << std::endl;// 打印12std::cout << "b =" << b << std::endl;// 打印12
}

例如调用<algorithm>中的std::sort,ISO C++ 98 的写法是要先写一个compare函数:

1

2

3

4

bool compare(int& a,int& b)

{

    return a>b;

}

然后,再这样调用:

1

sort(a, a+n, compare);

然而,用ISO C++ 11 标准新增的Lambda表达式,可以这么写:

1

sort(a, a+n, [](int a,int b) ->bool{return a>b;});//降序排序

这样一来,代码明显简洁多了。

c++ 11 之lambda相关推荐

  1. C++11中Lambda表达式的使用

    Lambda表达式语法:[capture ] ( params ) mutable exception attribute -> return-type { body } 其中capture为定 ...

  2. C++11:lambda表达式

    文章目录 1. 概念 2. 语法 3. 示例 示例1 示例2 示例3 示例4 4. 捕捉方式 基本方式 隐式和混合 补充 5. 传递lambda表达式 示例 6. 原理 7. 内联属性 1. 概念 l ...

  3. 【C++11】lambda函数及其基本用法

    目录 即看即用 详情 基本概念和用法 捕获列表 lambda表达式的类型 即看即用 语法: [capture](parameters)->return-type {body} []叫做捕获说明符 ...

  4. c++ lambda函数_C++11 之 lambda函数的详细使用

    1. lambda 函数概述 lambda 表达式是一种匿名函数,即没有函数名的函数:该匿名函数是由数学中的λ演算而来的.通常情况下,lambda函数的语法定义为: [capture] (parame ...

  5. QT5和C++ 11:Lambda是你的朋友(翻译文)

    前言     自从Qt5发布以来,我一直在推迟对我一直在做的一个项目升级到Qt5.即使是像这样的版本,从Qt 4.7到Qt 5(没错,跳过了4.8),出于某种原因也不像暗示的那么简单.他们说: &qu ...

  6. c++11 lambda

    为什么需要lambda函数 匿名函数是许多编程语言都支持的概念,有函数体,没有函数名.1958年,lisp首先采用匿名函数,匿名函数最常用的是作为回调函数的值.正因为有这样的需求,c++引入了lamb ...

  7. C++11 Lambda表达式

    1.简介 1.1定义 C++11新增了很多特性,Lambda表达式(Lambda expression)就是其中之一,很多语言都提供了 Lambda 表达式,如 Python,Java ,C#等.本质 ...

  8. 234-C++11的auto和lambda

    C++11的auto使用方法 auto在C语言已经失去了意义 我们来谈谈C++11的auto使用方法 我们上代码 示例1: 这里的x和y的类型我们没有确定,但是有了上面a和ft的定义,auto可以推导 ...

  9. C++11 lambda表达式与函数对象

    C++ lambda表达式与函数对象 lambda表达式是C++11中引入的一项新技术,利用lambda表达式可以编写内嵌的匿名函数,用以替换独立函数或者函数对象,并且使代码更可读.但是从本质上来讲, ...

  10. 什么是AWS Lambda?

    什么是AWS Lambda? 计算服务的演进 EC2------Container-------Lambda 虚拟机---容器--------------serverless无服务器架构 EC2(El ...

最新文章

  1. Forbidden Attack:7万台web服务器陷入被攻击的险境
  2. 算法62---最长回文子序列长度(子串)、回文子序列总共个数(子串)【动态规划】...
  3. 转这个博客了,以前的博客不用了。(技术为主,寒暄为辅)
  4. 编写DLL所学所思(2)——导出类
  5. 年结 利润分配-未分配利润年结
  6. 误删了microsoft visual c++后如何正常运行matlab
  7. mongodb实验报告_Dropwizard,MongoDB和Gradle实验
  8. PHP开发框架[国内框架]
  9. 结对编程,到底是双剑合璧还是脚趾抠地?
  10. 美团将建新上海总部 斥资65亿元拿下上海杨浦商办地块
  11. LINUX 安装RABBITMQ详细教程
  12. 如何高效阅读 Spark 和 Hadoop 这类大型开源项目源代码?
  13. 一副对联,送给所有创业小公司
  14. 图像处理-提取指定颜色
  15. Windows查看所有的端口及端口对应的程序
  16. 傲梅分区助手 linux,傲梅分区助手(详解磁盘操作)
  17. linux沙箱隔离_为容器提供更好的隔离:沙箱容器技术概览
  18. 安装VMware时,出现 安装程序无法继续 Microsoft Runtime DLL 安装程序未能完成安装,解决方法
  19. 虚拟筛选及其方法学验证与ROC曲线python实现
  20. Go基础:路径、文件名和包名的关系

热门文章

  1. 一次网站登录慢故障排查
  2. sencha touch 2中list控件分组排序
  3. 解码.NET 2.0配置之谜(一)
  4. 限制后的线性表--栈
  5. Android Studio Template(模板)开发,最后有参考
  6. Navicat Premium查看建表语句(DDL)
  7. MAC中让右键菜单出现终端(命令行)打开文件夹的功能
  8. FreeType 使用FT_MEM_ALLOC/FT_FREE内存操作
  9. LINUX编译GtkLP(开源的打印机图形化工具)
  10. 文字处理技术:页面布局时,有两个方向