C++lambda表达式-创新互联

C++11新标准引入lambda表达式,主要部分如下:

创新互联公司一直在为企业提供服务,多年的磨炼,使我们在创意设计,全网整合营销推广到技术研发拥有了开发经验。我们擅长倾听企业需求,挖掘用户对产品需求服务价值,为企业制作有用的创意设计体验。核心团队拥有超过十多年以上行业经验,涵盖创意,策化,开发等专业领域,公司涉及领域有基础互联网服务西云机房app开发定制、手机移动建站、网页设计、网络整合营销。

    [捕获列表](参数)->type{函数体},使用尾置返回类型,其中可以忽略参数与返回类型,但要保存捕获列表与函数体,使用调用运算符调用,可在(参数)后添加mutable限定符使值捕获的数据可在函数体里修改。

    使用lambda表达式时,编译器会产生未命名类的未命名对象,且有一个调用运算符成员函数,实际使用时会调用该调用运算符成员函数。该未命名类不包含默认构造函数、赋值运算符、默认析构函数,而是否包含默认的拷贝、移动构造函数与捕获数据成员类型有关。

    [捕获列表]

    表示外部捕获的数据,会将外部数据通过构造函数传入未命名类里,可使用值传递与引用传递,值传递:auto Lambda = [intVal](){cout << intVal << endl;}; Lambda();,默认intVal为const类型,且该调用运算符是const成员函数,不可修改intVal,如果需要修改则在(参数)后添加限定符mutable:

auto Lambda = [intVal]()mutable{cout << ++intVal << endl;}; Lambda();,此时intVal可修改,且调用运算符成员函数是非const函数。值传递不会改变外部数据。

    引用传递:auto Lambda = [&intVal](){cout << ++intVal << endl;}; Lambda();,引用传递是否被修改取决于intVal是否为const类型,如果被修改则会同时修改外部数据。

    可使用隐式的值、引用传递,其捕获的数据可通过编译器在函数体的推导得出:auto Lambda = [=,&intVal](){cout << (data+intVal) << endl;}; Lambda();,其中data为隐式值传递;auto Lambda = [&](){cout << (data-intVal) << endl; func();}; Lambda();,其中data,intVal都是隐式引用传递,同时调用了func函数。如果使用隐式传递则要求=、&要在捕获列表的首位置,同时之后的显式捕获不可为隐式捕获的传递方式。

    注:如果是在类内使用并调用类内数据,则可以使用[=]、[&]、[this]方式隐式或显式捕获this并使用类内成员,如果是类静态成员可以直接使用而不用捕获。

    (参数)

接收外部参数,与普通调用类似:auto Lambda = [](int val){cout << ++val << endl;}; Lambda(1);。匿名函数是可调用对象,可作为比较函数传入:

// main.cpp
#include <iostream>
#include <algorithm>
using std::cout;
using std::ends;
using std::sort;
using std::string;
using std::begin;
using std::end;

int main()
{
    string arr[] = {"123","12345","1233","1233345"};
    sort(begin(arr),end(arr),[]
              (const string &s1,const string &s2)
              {
                  return s1.size() > s2.size(); // 按照字符串的大小逆序排序
              }
             );
    for (const auto &each : arr)
    {
        cout << each << ends;
    }
    return 0;
}

    ->type为尾置返回类型,可省略,如果有多个return且返回类型不一致,则需要指明返回类型:

// main.cpp
#include <iostream>
using std::cout;
using std::ends;

int main()
{
    auto Lambda = [](int choice)->char
    {
        if (choice == 0)
        {
            return 0x41; // 'A'
        }
        else
        {
            return '1';
        }
    };
    cout << Lambda(0) << ends;
    return 0;
}

    {函数体},这个应该很熟悉

    以上是对lambda表达式的介绍,如有错误望交流指正。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

网页标题:C++lambda表达式-创新互联
标题链接:https://www.cdcxhl.com/article30/ggeso.html

成都网站建设公司_创新互联,为您提供品牌网站建设小程序开发网站营销响应式网站面包屑导航微信公众号

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设公司