【 lambda表达式的使用】

本文详细介绍了lambda表达式在C++中的使用,包括其作为类、函数指针和仿函数的等价形式,参数捕获方式(值捕获、引用捕获和混合捕获),以及在结构体中的this捕获。通过实例演示了如何定义、捕获局部变量并应用于实际编程场景。

lambda表达式的使用

本质上会被翻译成一个类

C++可以调用的对象

函数指针

仿函数

lambda表达式

基本组成部分

参数与函数体

返回类型

捕获:针对函数体中使用的局部自动对象进行捕获

值捕获,引用捕获和混合捕获

this 捕获

初始化捕获

*this捕获

说明符:

mutable/constexpr(C++17)/consteval(C++20)…

模板形参

[capture list] (parameter list) -> return type  { function body };

举例如下:

auto x = [](int val)->float//指定返回值类型(当然也可以不用)
{return (val>3)&&(val<10);};
  • []中括号用作捕获,
  • 静态的全局变量,不需要捕获,直接使用即可
  • 值捕获,值捕获对数据的处理,不会溢出到表达式的外部
int y = 10;
auto x = [y] (int val) mutable{
   // ++y;
    return val>y;  
};
cout<<x(5)<<endl;
cout<<y<<endl;

使用引用捕获,声明引用,会对最外层的改变,输出的结果也会发生变化

int y = 10;
auto x = [&y] (int val) {
    ++y;
    return val>y;  
};
cout<<x(5)<<endl;
cout<<y<<endl;

混合捕获

int y = 10;
int z =3;
auto x = [&y,z] (int val) {
    ++y;
    return y>z;  
};
cout<<x(5)<<endl;
cout<<y<<endl;

使用等号,可以进行值捕获

使用&,表示使用的引用捕获

或者混合捕获也可以

那么如何在结构体中,使用this 捕获

struct Str{
    auto fun(){
        int val =3;
        auto lam = [val,this](){
            return val>x; 
        };
        return lam();
    }
    int x;
};
int main(){
    Str s;
    s.fun();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值