您现在的位置是:群英 > 开发技术 > 编程语言
C++中的Lambda表达式用来做什么,怎样使用?
Admin发表于 2021-12-21 17:49:101279 次浏览

    这篇文章我们来了解C++中的Lambda表达式的内容,下文对Lambda表达式的作用和使用都有很详细的介绍,有需要的朋友可以参考,感兴趣的朋友接下来就跟随小编来了解看看吧!

    概述

        C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda 的语法形式如下:

    [捕获列表] (参数) mutable 或 exception 声明 -> 返回值类型 {函数体}
    //计算两个值的和
    auto func = [](int a, int b) -> int{return a+b;};
    //当返回值的类型是确定时,可以忽略返回值
    auto func = [](int a, int b){return a + b;};
    //调用
    int sum = func(1, 3);

    语法分析

    捕获列表

        Lambda 表达式相当于一个类,那么捕获列表就是传递给这个类的类成员。比如:

    class Labmda
    {
    public:
        const int test;
        Labmda(int value):test(value)
        {
        }
    public:
        int run(int a, int b)
        {
            return a + b + test;
        }
    }
    int main()
    {
        int test = 10;
        auto func = Labmda(test);
        int sum = func.run(1, 3);
    }
    //使用Lambda 表达式的写法
    int main()
    {
        int test = 10;
        auto func = [test](int a, int b){return a + b + test;};
        int sum = func(1, 3);
    }

    捕获列表有以下格式:

    格式 描述
    [] 不带任何参数
    [=] Lambda表达式之前的局部变量,包括所在类的this,变量按值方式传递
    [&] Lambda表达式之前的局部变量,包括所在类的this,变量按引用方式传递
    [this] Lambda表达式所在类的this
    [a] Lambda表达式之前的局部变量a的值,也可以传入多个值,如[a , b]
    [&a] Lambda表达式之前的局部变量a的引用

    关键字声明

        关键字声明一般都很少用到,也不建议随便使用,可以忽略不计。

    mutable

        当捕获列表以值的方式传递时有效,加上此关键字后,可以修改Lambda类成员(带const修饰符)。比如:

    int test = 10;
    //编译报错,test成员不能修改
    auto func = [test](int a, int b){test = 8; return a + b + test;}; 
    //编译正常
    auto func = [test](int a, int b)mutable {test = 8; return a + b + test;}; 

        这里需要注意的是:Lambda类成员test修改之后,并不会改变外部int test的值。

    exception

        exception 声明用于指定函数抛出的异常,如抛出整数类型的异常,可以使用 throw(int)

    示例

        捕获列表按值传递

    int test = 10;
    auto func = [=](int a, int b){return a + b + test;};
    auto func2 = [test](int a, int b){return a + b + test;};
    int sum = func(1, 3); //sum等于14

    这里需要注意的是func表达式中test的值只更新到表达式之前:

    int test = 10;
    auto func = [=](int a, int b){return a + b + test;};
    test = 5;
    int sum = func(1, 3); //sum还是等于14

        捕获列表按引用传递

    int test = 10;
    auto func = [&](int a, int b){test = 5; return a + b + test;};
    auto func2 = [&test](int a, int b){test = 5; return a + b + test;};
    int sum = func(1, 3); //sum等于9,test等于5

        这里func表达式中test的值就能随时更新:

    int test = 10;
    auto func = [&](int a, int b){return a + b + test;};
    test = 5;
    int sum = func(1, 3); //sum等于9,test等于5

    总结

        关于C++中的Lambda表达式的内容就介绍到这,上述示例具有一定的借鉴价值,感兴趣的朋友可以参考,对大家学习和理解Lambda表达式会有一定的帮助。最后,想要了解更多大家可以关注其它的相关文章。

    文本转载自脚本之家

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

    标签: Lambda表达式
    相关信息推荐
    2022-05-16 11:45:11 
    摘要:h5页面是一个自上而下的页面,可以简单理解为一个单网页,不过h5页面搭配了各种有趣的设计。h5是html5的缩写,它是html发展到第五代的通用网页语言。
    2022-10-11 09:18:17 
    摘要:Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法。本文将用Java语言实现Floyd算法,需要的可以参考一下
    2021-12-27 19:00:49 
    摘要:C语言动态内存分配是什么?有一些朋友对于动态内存分配不是很理解,对此本文就给大家来详细的介绍一下,此外本文还介绍了动态内存管理中常见的错误和一些经典的相关笔试题等等,对大家学习和理解C语言动态内存分配有一定的帮助,那么感兴趣的朋友就继续往下看吧。
    云活动
    推荐内容
    热门关键词
    热门信息
    群英网络助力开启安全的云计算之旅
    立即注册,领取新人大礼包
    • 联系我们
    • 24小时售后:4006784567
    • 24小时TEL :0668-2555666
    • 售前咨询TEL:400-678-4567

    • 官方微信

      官方微信
    Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
    增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
    免费拨打  400-678-4567
    免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
    微信公众号
    返回顶部
    返回顶部 返回顶部