• Lambda 表达式捕获列表


    在 C++ 中,Lambda 表达式是一种创建匿名函数的方式。Lambda 表达式的基本形式如下:

    [capture](parameters) -> return_type {
        // 函数体
    }
    
    • 1
    • 2
    • 3

    其中:

    • capture 是捕获列表,用于捕获外部变量。
    • parameters 是 Lambda 函数的参数列表。
    • return_type 是 Lambda 函数的返回类型。
    • {} 内是 Lambda 函数的函数体。

    捕获列表 [capture]

    捕获列表指定 Lambda 函数能够访问的外部变量。有以下几种捕获方式:

    1. 不捕获任何变量: [],Lambda 函数无法访问任何外部变量。

      []() {
          // 无法访问外部变量
      };
      
      • 1
      • 2
      • 3
    2. 捕获所有局部变量(值传递): [=],Lambda 函数通过值捕获所有局部变量。

      int x = 10;
      auto lambda = [=]() {
          // 可以访问 x 的值,但不能修改
          int result = x + 5;
      };
      
      • 1
      • 2
      • 3
      • 4
      • 5
    3. 捕获所有局部变量(引用传递): [&],Lambda 函数通过引用捕获所有局部变量。

      int x = 10;
      auto lambda = [&]() {
          // 可以访问并修改 x 的值
          x = 20;
      };
      
      • 1
      • 2
      • 3
      • 4
      • 5
    4. 捕获指定的局部变量: [x][&x],只捕获变量 x,可以通过值或引用捕获。

      int x = 10;
      auto lambda = [x]() {
          // 可以访问 x 的值,但不能修改
          int result = x + 5;
      };
      
      • 1
      • 2
      • 3
      • 4
      • 5

    this 指针

    在 Lambda 表达式中,this 指针的含义取决于捕获列表。默认情况下,Lambda 函数不能访问类的成员变量和成员函数,但是可以通过 [this] 捕获 this 指针,使 Lambda 函数能够访问类的成员。

    class MyClass {
    public:
        void example() {
            int x = 10;
            auto lambda = [this, x]() {
                // 可以访问类的成员变量和 x
                int result = memberVar + x;
                memberFunction();
            };
            lambda();
        }
    
    private:
        int memberVar = 42;
    
        void memberFunction() {
            // 类的成员函数
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这个例子中,[this, x] 捕获了 this 指针和局部变量 x,使得 Lambda 函数可以访问类的成员变量和局部变量 x

  • 相关阅读:
    GPUImage框架使用
    如何给MySQL添加自定义语法 ?
    IRQ中断服务函数
    如何查看IDEA打开的当前项目有多少行代码
    大二Web课程设计:HTML+CSS学校静态网页设计——南京师范大学泰州学院(11页)
    buuctf刷题记录
    WebRTC系列-网络传输之4Connection排序
    【力扣每日一题】2023.9.24 LRU缓存
    LabVIEW应用开发——基本函数(一)
    MySQL MVCC机制详解
  • 原文地址:https://blog.csdn.net/qq_39054069/article/details/134514135