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 替换
    
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值