• c++ lambda


    语法

    [capture](parameters) mutalble->return-type{statement};
    
    • 1

    capture

    • [] :什么也不捕获
    • [=] : 按值的方式捕获所有变量
    • [&] : 按引用方式捕获所有变量
    • [boo] : 值捕获boo的值
    • [=,&a] : 按值捕获所有局部变量,按引用捕获变量a
    • [=,&a,&b,&c] : 同上
    • [&,a] : 按引用捕获所有局部变量,按值捕获方式捕获a
    • [&,a,b,c] : 同上
    • [this] : 在成员函数中,直接捕获this指针

    mutable

    值捕获后,在匿名函数中对该值是不能做修改的,如果想要做修改,必须加上 mutable 关键字,并且在匿名函数中做的修改结果在函数外是不会生效的。

    parameters

    参数列表也是可以将外部的值传递给匿名函数内部的;与正常函数的形参一样。

    return-type

    对于编译器能自动推导的返回类型,可以省略 return-type,但是如果无法推导的类型,就必须添加上返回类型

    当函数不止一个return语句时,就需要加上返回类型了

    示例

    auto f = [](int x, int y){ return x + y; };
    int result = f(10, 20);    //result == 30
    
    • 1
    • 2

    捕获列表

    int a = 10; b = 20, c = 30;
    
    //将变量a和b以值捕获方式传入到表达式中(a、b的值不可修改)
    auto f1 = [a, b]{ return a + b; };
    int result1 = f1();    //result1 == 30
    
    //将所有变量以值捕获方式传入到表达式中
    auto f2 = [=]{ return a + b + c; };
    int result2 = f2();    //result2 == 60
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    int a = 10; b = 20, c = 30;
    
    //将变量a和b以引用捕获方式传入到表达式中
    auto f1 = [&a, &b]{ a++; b++; };
    f1();    
    //a == 11    b == 21
    
    //将所有变量以引用捕获方式传入到表达式中
    auto f2 = [&]{ a++; b++; c++; };
    f2();    
    //a == 12    b == 22    c == 31
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    mutable

    int a = 10;
    
    //未用mutable修饰
    auto f1 = [a](){
        a++;    //报错
    }
    
    //使用mutable修饰
    auto f2 = [a]() mutable {
        a++;    //成功;修改值只在f2中有效!!!
    }
    // 调用f2() 后,a的值不变 !!!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    云原生安全:4C~
    Redis大白话(●三●)
    mysql安装配置教程(Linux+Windows)
    JUL 学习
    Apache DolphinScheduler & 亚马逊云科技联合Meetup: 基于云上的最佳实践
    基于PHP+MySQL图书管理系统的设计与实现
    ppt学习总结--一般人需要掌握的内容
    docker的使用
    NR modulation 1
    这是什么APP?有谁知道的嘛?
  • 原文地址:https://blog.csdn.net/qq_27953479/article/details/132734782