一、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. layui与jQuery一起使用

    1,先导入jquery <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2 ...

  2. MNIST数据集环境搭建

    由于换了电脑,ubuntu是重新下载的,因此记录一些相关数据集的搭建: 首先是data数据集,在第七讲中 我们需要建立data文件夹,并将数据集放进去 再就是model模型 我们应该新建一个model ...

  3. The Reason Why Cosmetic Airless Bottles Are Widely Used

    The contents of the Cosmetic Airless Bottles    can be isolated from the air, to prevent the product ...

  4. Bugku-CTF之web8(txt????)

    Day29  

  5. bbs系统的相关知识点

    1.注册功能 1.注册功能往往都会由很多校验性的需求 所以这里我们用到了forms组件 项目中可能有多个地方需要用到不同的forms组件 为了解耦合 但是创建一个py文件 专门用来存放项目用到的所有的 ...

  6. AlertDialog 、SimpleDialog、 showModalBottomSheet、showToast 自定义 Dialog

    // AlertDialog .SimpleDialog.showModalBottomSheet.showToast // 使用showToast安装插件 https://pub.dev/packa ...

  7. 【Python redis】

    目录 基本用法 连接池 基本命令 String Hash List set "下载:pip install redis @ *** 基本用法 redis库提供两个类,Redis和Strict ...

  8. VMware克隆centos后需要进行修改配置的地方

    1. 首先在VMware中通过复制现在状态的虚拟机或者快照形式的虚拟机,选择完整复制文件进行克隆. 2.打开克隆的虚拟机之后,需要修改主机名和相应的hosts表 2.1 修改主机名 输入  vi /e ...

  9. JS中constructor属性

    constructor属性用于对当前对象的构造函数的引用.可以用来判断对象的类型: <script> var newStr = new String("One world One ...

  10. Centos6.10-FastDFS-Storage-Nginx配置

    nginx+fastdfs-nginx-module 安装此处省略. 1.进入工作目录 cd /usr/local/nginx/conf 2.创建子目录 mkdir configs 3.创建stora ...