C++的lambda表达式

本文详细阐述了C++中的lambda表达式,包括其构成(捕获列表、形参列表、返回值类型等),以及如何使用和调用。重点介绍了捕获方式和调用示例。

本文介绍C++的lambda表达式。

lambda表达式有些时候也被称作匿名函数,个人觉得叫lambda表达式更确切一些,毕竟在书写时后面都会跟1个";"来结尾(函数是没有的)。

1.语法规则

lambda表达式一般由以下几部分组成:

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

用中文来描述:

[捕获列表] (形参列表) -> 返回值类型
{
    函数体;
}

1)捕获列表:必选,lambda表达式访问外部变量(除自己形参以外的变量)时,需指定哪些变量传入及传入方式,捕获方式如下表:

[]不捕获任何外部变量,但全局变量和静态变量仍可用
[a, b, …]以值的方式捕获a,b,...
[this]以值的方式捕获this指针
[=]以值的方式捕获外部所有变量
[&]以引用的方式捕获外部所有变量
[=, &x]以引用的方式捕获外部所有变量x,以值的方式捕获外部其它变量
[&, x]以值的方式捕获外部所有变量x,以引用的方式捕获外部其它变量

2)形参列表:必选,lambda表达式的输入参数,与函数的形参类似

3)返回值类型:可选,返回值类型

4)mutable指示符:可选,是否可以修改按值捕获的变量

5)exception(类型):可选,抛出指定类型的异常

2.例子

以下例子以语句的方式进行呈现,注意末尾的";"

1)捕获为空,返回值为空,形参为空

这是1个最简单的lambda表达式

    auto fun = []()
    {
        
    };

2)捕获为空,返回值不为空,形参不为空

    auto fun = [](int x, int y) -> int
    {
        return x + y;
    };

3)捕获不为空,返回值不为空,形参不为空

    int a = 3;
    int b = 2;
    
    auto fun = [a, &b](int x, int y) -> int
    {
        b = 3;
        return x + y;
    };

这里a以值的方式捕获,b以引用的方式捕获

3.调用方式

int main()
{
    int a = 3;
    int b = 2;
    
    auto fun = [a, &b](int x, int y) -> int
    {
        b = 3;
        return x + y;
    };

    int c = fun(3, 2);

    std::cout << c << endl;
    std::cout << a << endl;
    std::cout << b << endl;

    return 0;
}

调用方式比较简单,和普通函数调用没太大区别。

总结,本文介绍了C++的lambda表达式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值