当前位置: 首页 > web >正文

c++的匿名函数捕获

捕获方式捕获内容示例
[=]所有外部变量的值(包括 this 指针)[=]() { std::cout << value; }
[&]所有外部变量的引用(包括 this 指针)[&]() { value = 100; }
[variable]指定变量的值[value]() { std::cout << value; }
[&variable]指定变量的引用[&value]() { value = 100; }
[this]当前对象的 this 指针[this]() { this->memberFunction(); }
[this, variable]this 指针和指定变量的值[this, value]() { std::cout << this->value; }
[this, &variable]this 指针和指定变量的引用[this, &value]() { value = 100; }
[=, this]所有外部变量的值和 this 指针[=, this]() { std::cout << this->value; }
[&, this]所有外部变量的引用和 this 指针[&, this]() { value = 100; }

1. 捕获所有变量的值:[=]

  • 捕获方式:捕获所有外部变量的值(包括 this 指针)。
  • 用途:允许在 Lambda 表达式中访问所有外部变量的值。
  • 示例
    int value = 42;
    auto lambda = [=]() {std::cout << value << std::endl; // 使用捕获的 value 变量
    };
    lambda();
    

2. 捕获所有变量的引用:[&]

  • 捕获方式:捕获所有外部变量的引用。
  • 用途:允许在 Lambda 表达式中访问所有外部变量的引用,因此可以修改外部变量的值。
  • 示例
    int value = 42;
    auto lambda = [&]() {value = 100; // 修改外部变量 value 的值
    };
    lambda();
    std::cout << value << std::endl; // 输出 100
    

3. 捕获特定变量的值:[variable]

  • 捕获方式:捕获指定变量的值。
  • 用途:只捕获需要的变量,避免捕获不必要的变量。
  • 示例
    int value = 42;
    int anotherValue = 100;
    auto lambda = [value]() {std::cout << value << std::endl; // 使用捕获的 value 变量
    };
    lambda();
    

4. 捕获特定变量的引用:[&variable]

  • 捕获方式:捕获指定变量的引用。
  • 用途:只捕获需要的变量的引用,允许在 Lambda 表达式中修改这些变量。
  • 示例
    int value = 42;
    int anotherValue = 100;
    auto lambda = [&value]() {value = 100; // 修改外部变量 value 的值
    };
    lambda();
    std::cout << value << std::endl; // 输出 100
    

5. 混合捕获:[=, &variable][&, variable]

  • 捕获方式:可以混合使用值捕获和引用捕获。
  • 用途:根据需要灵活捕获变量的值或引用。
  • 示例
    int value = 42;
    int anotherValue = 100;
    auto lambda = [=, &anotherValue]() {std::cout << value << std::endl; // 使用捕获的 value 变量anotherValue = 200; // 修改外部变量 anotherValue 的值
    };
    lambda();
    std::cout << anotherValue << std::endl; // 输出 200
    

6. 捕获 this 指针:[this]

  • 捕获方式:捕获当前对象的 this 指针。
  • 用途:允许在 Lambda 表达式中访问当前对象的成员变量和成员函数。
  • 示例
    class MyClass {
    public:void memberFunction() {int value = 42;auto lambda = [this]() {std::cout << this->value << std::endl; // 使用捕获的 this 指针};lambda();}
    private:int value = 42;
    };
    

7. 捕获 this 指针并捕获其他变量:[this, variable]

  • 捕获方式:捕获 this 指针和其他变量。
  • 用途:在 Lambda 表达式中同时访问当前对象的成员和外部变量。
  • 示例
    class MyClass {
    public:void memberFunction() {int value = 42;auto lambda = [this, value]() {std::cout << this->value << std::endl; // 使用捕获的 this 指针std::cout << value << std::endl; // 使用捕获的 value 变量};lambda();}
    private:int value = 42;
    };
    

8. 捕获 this 指针并捕获其他变量的引用:[this, &variable]

  • 捕获方式:捕获 this 指针和其他变量的引用。
  • 用途:在 Lambda 表达式中同时访问当前对象的成员和外部变量的引用。
  • 示例
    class MyClass {
    public:void memberFunction() {int value = 42;auto lambda = [this, &value]() {std::cout << this->value << std::endl; // 使用捕获的 this 指针value = 100; // 修改外部变量 value 的值};lambda();std::cout << value << std::endl; // 输出 100}
    private:int value = 42;
    };
    

9. 捕获所有变量的值并捕获 this 指针:[=, this]

  • 捕获方式:捕获所有外部变量的值并捕获 this 指针。
  • 用途:在 Lambda 表达式中同时访问所有外部变量的值和当前对象的成员。
  • 示例
    class MyClass {
    public:void memberFunction() {int value = 42;auto lambda = [=, this]() {std::cout << this->value << std::endl; // 使用捕获的 this 指针std::cout << value << std::endl; // 使用捕获的 value 变量};lambda();}
    private:int value = 42;
    };
    

10. 捕获所有变量的引用并捕获 this 指针:[&, this]

  • 捕获方式:捕获所有外部变量的引用并捕获 this 指针。
  • 用途:在 Lambda 表达式中同时访问所有外部变量的引用和当前对象的成员。
  • 示例
    class MyClass {
    public:void memberFunction() {int value = 42;auto lambda = [&, this]() {std::cout << this->value << std::endl; // 使用捕获的 this 指针value = 100; // 修改外部变量 value 的值};lambda();std::cout << value << std::endl; // 输出 100}
    private:int value = 42;
    };
    
http://www.xdnf.cn/news/2573.html

相关文章:

  • 代码小优化
  • Babel、core-js、Loader之间的关系和作用全解析
  • 人类社会的第四阶段
  • 【C语言练习】006. 编写条件语句处理不同情况
  • Spring中生成Bean的方式总结-笔记
  • Customizing Materials Management with SAP ERP Operations
  • Spark-Streaming核心编程内容总结
  • CSS布局实战:Flexbox 与 Grid 精髓解析
  • ecovadis认证评估标准?ecovadis审核目的?
  • 网络安全厂商F5荣登2025 CRN AI 100榜单,释放AI潜力
  • Vue3 里 CSS 深度作用选择器 :deep()
  • HQChart k线图配置
  • BUUCTF——The mystery of ip
  • mac 设置飞书默认浏览器(解决系统设置默认浏览器无效)
  • Nacos简介—4.Nacos架构和原理二
  • [AHOI2001] 质数和分解
  • 蓝桥杯 16. 密文搜索
  • Zookeeper实现分布式锁实战应用
  • 启效云平台审核流应用场景及功能介绍
  • day51—二分法—x 的平方根(LeetCode-69)
  • Gin 框架中集成 runtime/debug 打印日志堆栈信息
  • 2025.4.22 JavaScript 常用事件学习笔记
  • 司法大模型构建指南
  • 问题四、如何解决模型轴配置问题
  • 高功率无人机动力方案首选:CKESC ROCK 220A-H CAN 电调工程性能实测
  • 开发一个LabVIEW软件需要多少钱
  • 2025通信会丨以创新技术赋能新型电力系统 锐捷知识大脑推动效率提升
  • rabbitmq常用命令
  • 代码随想录算法训练营Day37
  • Diamond软件的使用--(6)访问FPGA的专用SPI接口