一、C++11采用配对的方括号[]来创建一个匿名函数并执行,如:

  #include <iostream>

  int main()

  {

    auto func = []{

      std::cout << "hello world!!!" << std::endl;

    };

    func();

  }

  捕获选项:

  1)[]:不捕获任何变量(没有使用任何函数对象参数)。

  2)[=]:拷贝捕获(函数体内可以使用Lambda所在作用范围内所有可见局部变量,包括Lambda所在类的this,并且是值传递方式,函数体内不可以修改局变量)。

  3)[&]:引用捕获(函数体内可以使用Lambda所在作用范围内所有可见局部变量,包括Lambda所在类的this,并且是引用传递方式,函数体内可以修改局变量)。

  4)[this]:捕获this指针(函数体内可以使用Lambda所在类中的成员变量)。

  5)[a]:指定拷贝(将变量a按值进行传递,函数体内不能修改传递进来的a拷贝,因为默认情况下函数是const的,修改传递进来的a拷贝,可以添加mutable修饰符)。

  6)[&a]:指定引用(将a按引用进行传递,函数体内可以修改传递进来的bar拷贝)。

  7)[a,&b]:混合引用(将a按拷贝传递,b按引用传递)。

  8)[=,&a]:混合引用(将其它可见局部变量按拷贝传递,b按引用传递)。

  9)[a,&]:混合引用(将a按拷贝传递,其它可见局部变量按拷贝传递)。

  实例:

  1、不捕获任何变量

  #include <iostream>

  int main()

  {

    auto func = []{std::cout << "Hello World!!! << std::endl;}  //输出:Hello World!!!

    func();

  }

  2、拷贝捕获

  include <iostream>

  int main()

  {

    int i = 1024;

    auto func = [=]{std::cout << i << std::endl;}    //输出1024

    func();

  }

  3、引用捕获

  include <iostream>

  int main()

  {

    int i = 1024;

    auto func = [&]{std::cout << ++i << std::endl;}  //输出1025

    func();

  }

  4、捕获this指针

  #include <iostream>

  class Student

  {

  public:

    Student(int age = 0) : _age(age){}

    Show_Age()

    {

      auto func = [this]{

      std::cout << this->_age << std::endl;

      };

      func();

    }

private:

  int _age;

  }

  int main()

  {

    Student student(1024);

    student.Show_Age();

  }

  

C++11常用特性介绍——Lambda表达式的更多相关文章

  1. C++11常用特性介绍——auto类型修饰符

    1.C++11常用特性介绍 从本篇开始介绍C++11常用特性,大致分:关键字及新语法.STL容器.多线程.智能指针内存管理,最后讲一下std::bind和std::function 二.关键字和新语法 ...

  2. c++11 新特性之lambda表达式

    写过c#之后,觉得c#里的lambda表达式和delegate配合使用,这样的机制用起来非常爽.c++11也有了lambda表达式,形式上有细小的差异.形式如下: c#:(input paramete ...

  3. C++11 新特性:Lambda 表达式

    参考文章:https://blogs.oracle.com/pcarlini/entry/c_1x_tidbits_lambda_expressions 或许,Lambda 表达式算得上是 C++ 1 ...

  4. C++11新特性(3) lambda表达式(1)

    C++11加入了一项名为lambda表达式的新功能.通过这项功能能编写内嵌的匿名函数,而不必编写独立函数或函数对象,使得代码更加理解. lambda表达式包括下面部分. [capture_block] ...

  5. C++11新特性之一——Lambda表达式

    C++11新特性总结可以参考:http://www.cnblogs.com/pzhfei/archive/2013/03/02/CPP_new_feature.html#section_6.8 C++ ...

  6. C++11 新特性之 Lambda表达式

    lambda表达式能够用于创建并定义匿名的函数对象,以简化编程工作 Lambda的语法例如以下: [函数对象參数](操作符重载函数參数)->返回值类型{函数体} []内的參数指的是Lambda表 ...

  7. C++11常用特性介绍——decltype关键字

    一.decltype的意义 有时我们只想从表达式的类型推断出要定义的变量类型,但是不想用其值进行初始化的时候,C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型,在 ...

  8. C++11常用特性介绍——左值引用、右值引用

    一.左值.右值 1)左值:可以放在赋值号左侧.可以被赋值的值:左值必须要在内存中有实体. 2)右值:必须放在赋值号右侧.取出值赋值给其它变量:右值可以在内存中也可以在CPU寄存器中. 二.引用 引用是 ...

  9. C++11常用特性介绍——array容器

    std::array是具有固定大小的数组,支持快速随机访问,不能添加或删除元素,定义于头文件<array>中. 一.概要 array是C++11新引入的容器类型,与内置数组相比,array ...

随机推荐

  1. C语言数据结构——第三章 栈和队列

    三.栈和队列 栈和队列是两种重要的线性结构.从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操作是线性表操作的子集,它们的操作相对于线性表来说是受到限制的,因此,可以称其为限定性 ...

  2. 谈谈我对Promise的理解

    一.Promise是什么? Promise是最早由社区提出和实现的一种解决异步编程的方案,比其他传统的解决方案(回调函数和事件)更合理和更强大. ES6 将其写进了语言标准,统一了用法,原生提供了Pr ...

  3. robotframework初始化时有返回值怎么处理

    方法一:set suite variable/set global variable 假设执行add school class会返回一个id,这个id在后面的脚本中还要使用. 因为初始化时只能有一个关 ...

  4. OO完结篇-第四单元小结

    OO第四单元小结 一.作业架构分析. 1.第一次作业 本次作业需要完成UML类图查询. 难点在于初次接触UML,需要对UML进行一定程度的学习和理解. 思路主要是根据每个传进来的element获取其t ...

  5. CDQ 分治

    引言: 什么是CDQ分治?其实这是一种思想而不是具体算法,因此CDQ分治覆盖的范围相当广泛,在 OI 界初见于陈丹琦 2008 年的集训队作业中,故被称为CDQ分治. 大致分为三类: cdq分治解决与 ...

  6. laravel Excel导入导出

    1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和导出. 该 ...

  7. Codeforces Round #577 (Div. 2) 题解

    比赛链接:https://codeforc.es/contest/1201 A. Important Exam 题意:有\(n\)个人,每个人给出\(m\)个答案,每个答案都有一个分值\(a_i\), ...

  8. 深入delphi编程理解之消息(二)发送消息函数及消息编号、消息结构体的理解

    一.delphi发送消息的函数主要有以下三个: (一).SendMessage函数,其原型如下: function SendMessage( hWnd: HWND; {目标句柄} Msg: UINT; ...

  9. Java生鲜电商平台-生鲜电商高并发下的接口幂等性实现与代码讲解

    Java生鲜电商平台-生鲜电商高并发下的接口幂等性实现与代码讲解 说明:Java生鲜电商平台-生鲜电商高并发下的接口幂等性实现与代码讲解,实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返 ...

  10. 阿里云服务器-2.使用putty连接

    1.下载PuTTY 进入官网 点击我跳转 点击here 看自己电脑是多少位选择下载 2.安装 一直点击下一步就行 这里可以选择也可以不选择,这会在创建桌面快捷文件 看图注意事项 这里也可以用密匙,先去 ...