Lambda 表达式(C++11)

Lambda 表达式(C++11)

  1. Lambda 表达式基本语法
[capture](parameters) -> return_type {
	function_body
}

​ capture: 捕获列表,指定lambda表达式如何获取外部变量。[] 捕获列表为空表示不捕获外部变量

​ parameters: 参数列表,定义lambda表达式中内部的参数。

​ return_type: 返回类型,可以从函数体自动推导,可以省略。

​ function_body: lambda表达式内部逻辑

  1. capture: 捕获列表 (用于指定lambda表达式如何访问其作用域外的变量)

    1. 按值捕获:(捕获在lambda表达式定义的时候完成,调用lambda表达式才会执行其中的代码
      1. [=] (捕获所有外部变量副本)
      2. [var1, var2] (捕获指定外部变量部分)
    2. 按引用捕获:
      1. [&] (捕获所有外部变量引用)
      2. [var1, var2] (捕获指定外部变量引用)
    3. 混合捕获
    #include <iostream>
    using namespace std;
    
    int main() {
        int x = 10, y = 20;
        auto lambda = [=, &y]() { // 按值捕获x,按引用捕获y
            cout << "x in lambda: " << x << endl; // 输出 10
            cout << "y in lambda: " << y << endl; // 输出 20
            y = 30; // 修改外部变量y
        };
    
        x = 15;
        y = 25;
        lambda(); // 输出 x = 10, y = 25
        cout << "y after lambda: " << y << endl; // 输出 30
        return 0;
    }
    
    1. 返回类型:lambda 表达式可以显式指定返回类型,也可以由编译器自动推导。如果函数体只有一个返回语句,编译器可以自动推导返回类型。
    auto lambda = [] () -> int {
        return 42;
    };
    
    auto lambda_auto = [] () {
        return 42;
    };
    

    TIPS: std::function 是一个通用的函数包装器,可以保存、复制、调用任何可调用的目标(如普通函数、函数对象,指向成员函数的指针)

    function<int(int, int)> func = add;
    第一个int是返回值;
    (int, int) 表示参数列表
    
    function<int(int, int)> lambda = [](int a, int b) -> int {
        return a + b;
    }
    一般直接用 auto 替换
    

相关推荐

  1. Lambda 表达式C++11

    2024-06-09 13:34:03       25 阅读
  2. C++11lambda表达式 & 包装器

    2024-06-09 13:34:03       30 阅读
  3. C++11lambda表达式及function包装器

    2024-06-09 13:34:03       33 阅读
  4. C++ lambda表达式

    2024-06-09 13:34:03       66 阅读
  5. C++ lambda表达式

    2024-06-09 13:34:03       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-09 13:34:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-09 13:34:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-09 13:34:03       82 阅读
  4. Python语言-面向对象

    2024-06-09 13:34:03       91 阅读

热门阅读

  1. 我的创作纪念日

    2024-06-09 13:34:03       36 阅读
  2. Vue中 .passive 修饰符的作用

    2024-06-09 13:34:03       29 阅读
  3. 【python】flask相关包依赖关系问题

    2024-06-09 13:34:03       35 阅读
  4. HTTP常见响应状态码

    2024-06-09 13:34:03       44 阅读
  5. 深入了解Git:从数据模型到集成IDEA

    2024-06-09 13:34:03       29 阅读
  6. C语言---深入指针(4)

    2024-06-09 13:34:03       33 阅读
  7. 回溯之分割回文串

    2024-06-09 13:34:03       39 阅读
  8. 【环境搭建】2.阿里云ECS服务器 安装MySQL

    2024-06-09 13:34:03       44 阅读
  9. 2 程序的灵魂—算法-2.2 简单算法举例-【例 2.5】

    2024-06-09 13:34:03       32 阅读
  10. 【小海实习日记】金融-现货以及合约理解

    2024-06-09 13:34:03       36 阅读
  11. 【Qt】Item Views与Item Widgets的区别

    2024-06-09 13:34:03       35 阅读