Lambda 表达式捕获列表

捕获值列表,是允许我们在 Lambda 表达式的函数体中直接使用这些值,捕获值列表能捕获的值是所有在此作用域可以访问的值,包括这个作用域里面的临时变量,类的可访问成员,全局变量。捕获值的方式分两种,一种是按值捕获,一种是按引用捕获。顾名思义,按值捕获是不改变原有变量的值,按引用捕获是可以在 Lambda 表达式中改变原有变量的值。

[捕获值列表]:

  1. 空。没有使用任何函数对象参数。
  2. =。函数体内可以使用 Lambda 所在作用范围内所有可见的局部变量(包括 Lambda 所在类的 this),并且是值传递方式(相当于编译器自动为我们按值传递了所有局部变量)。
  3. &。函数体内可以使用 Lambda 所在作用范围内所有可见的局部变量(包括 Lambda 所在类的 this),并且是引用传递方式(相当于编译器自动为我们按引用传递了所有局部变量)。
  4. this。函数体内可以使用 Lambda 所在类中的成员变量。
  5. a。将 a 按值进行传递。按值进行传递时,函数体内不能修改传递进来的 a 的拷贝,因为默认情况下函数是 const 的。要修改传递进来的 a 的拷贝,可以添加 mutable 修饰符。
  6. &a。将 a 按引用进行传递。
  7. a, &b。将 a 按值进行传递,b 按引用进行传递。
  8. =, &a, &b。除 a 和 b 按引用进行传递外,其他参数都按值进行传递。
  9. &, a, b。除 a 和 b 按值进行传递外,其他参数都按引用进行传递。

   转载规则


《Lambda 表达式捕获列表》 吴杭沉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
so出现undefined symbol------ldd, nm, c++filt so出现undefined symbol------ldd, nm, c++filt
最近发版本,灰度发布的时候,发现进程没起来,回包自然是异常的。立即进行版本回退,发现 OK。 哪里出问题了呢?直接 ldd -r libtest.so 一下,就知道了,原来是缺符号。看看简化后的示例代码: #include <iost
2018-08-16
下一篇 
内存分配malloc 内存分配malloc
下面的代码片段输出是什么?为什么? char *ptr; if((ptr = (char *)malloc(0)) == NULL) puts("Got a null pointer"); else puts("Got a
2018-08-10
  目录