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 国际许可协议 进行许可。
 上一篇
C++ 语言链接:extern C++ 语言链接:extern "C"
提供以不同程序语言编写的模块间的连接。 extern 字符串字面量 { 声明序列(可选) } (1) extern 字符串字面量 声明 (2) 1) 将语言说明字符串字面量应用到声明于声明序列中的所有函数类型,具有外部连接的
2019-07-25
下一篇 
std::ref 的作用 std::ref 的作用
C++ 本身有引用 &,为什么 C++11 又引入了 std::ref?主要是考虑函数式编程如 std::bind 在使用时,是对参数直接拷贝,而不是引用。如下例子: void f(int& n1, int& n2,
2019-06-27
  目录