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表达式。

C++ Lambda表达式是一种简洁的匿名表示方法,可以在代码中定义并使用。Lambda表达式的格式一般为:[] (参数列表) mutable -> 返回值类型 { 表达式 }。Lambda表达式可以捕获外部变量,并将其作为参数传递给函数体部分进行处理。Lambda表达式在使用时可以作为函数对象、函数指针或者函数参数进行传递。 Lambda表达式的底层原理是通过生成一个匿名类来实现。该类会重载函数调用运算符(),并包含Lambda表达式的函数体。Lambda表达式中捕获的外部变量会以成员变量的形式存储在该类中。当Lambda表达式被调用时,实际上是调用了该类的重载函数调用运算符()。 Lambda表达式可以与std::function结合使用,以实现函数对象的灵活使用。也可以将Lambda表达式赋值给相同类型的函数指针,实现函数指针的使用。但一般不建议这样使用,因为Lambda表达式已经提供了更加方便和简洁的方式。 总结来说,C++ Lambda表达式是一种用于定义匿名函数的语法,可以捕获外部变量并进行处理。其底层通过生成一个匿名类来实现,并提供了与std::function和函数指针的结合使用方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C++11:lambda表达式](https://blog.youkuaiyun.com/zhang_si_hang/article/details/127117260)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值