当前位置: 首页 > news >正文

WordPress导航类主题主题百度排名优化咨询电话

WordPress导航类主题主题,百度排名优化咨询电话,哪家网站做的好,自己建网站做那个模块好文章目录 C11中的Lambda表达式1.lambda表达式形式2.向lambda传递参数3.使用捕获列表4.lambda捕获和返回1.值捕获2.引用捕获3.隐式捕获4.可变lambda5.指定lambda的返回类型 C11中的Lambda表达式 1.lambda表达式形式 lambda表达式具有以下形式 [capture list] (parameter list)…

文章目录

  • C++11中的Lambda表达式
  • 1.lambda表达式形式
  • 2.向lambda传递参数
  • 3.使用捕获列表
  • 4.lambda捕获和返回
    • 1.值捕获
    • 2.引用捕获
    • 3.隐式捕获
    • 4.可变lambda
    • 5.指定lambda的返回类型

C++11中的Lambda表达式

1.lambda表达式形式

lambda表达式具有以下形式
[capture list] (parameter list) -> return type {function body}

其中,[capture list] 是捕获列表,是一个lambda所在函数中定义的局部变量的列表,通常为空。return type、(parameter list)、{function body}和普通函数一样,分别表示返回类型、参数列表、函数体。但是和普通函数不同lambda必须尾置返回。

我们可以忽略参数列表和返回类型,但是必须永远包含捕获列表和函数体。

例如:

auto f = [] {return 42;}

上述例子中,忽略参数列表,表示函数参数为空;忽略返回类型,则会根据函数体中的代码推断出返回类型。

2.向lambda传递参数

和普通的函数类似,调用lambda时给定的实参被用来初始化lambda的形参,通常实参和形参的类型必须匹配。注意:lambda函数不能有默认参数。

例如:

[](const string& a,const string& b) {return a.size() < b.size();}

空捕获列表表明lambda不使用它所在函数中的任何局部变量。

应用如下:

stable_sort(word.begin().word.end(),[](const string& a,const string& b){return a.size() < b.size();});

当stable_sort需要比较两个元素时,它就会调用给定的lambda表达式。

3.使用捕获列表

虽然lambda可以出现在一个函数中,使用其局部变量,但是它只能使用那些明确指明的变量。一个lambda通过将局部变量包含在其捕获列表中来指出将会使用这些变量。

例如:

[sz](const string& a){return a.size() >= sz; }

lambda将捕获sz,函数体将string的大小与sz进行比较。

lambda以[] 开始,我们可以在其中添加以逗号分隔的名字列表,这些名字都是它所在函数中定义的。注意:一个lambda只有在其捕获列表中捕获一个它所在函数中的局部变量,才能在函数体中使用该变量。

另外,一个lambda可以使用定义在函数之外的名字。例如:

for_each(wc,words.begin(),[](const string& s){cout<<s<<"";});

4.lambda捕获和返回

lambda捕获列表
[]空捕获列表。lambda不能使用所在函数中的变量,一个lambda只有捕获变量后才能使用他们
[names]names是一个逗号分隔的名字列表,这些名字都是lambda所在函数的局部变量。默认情况下,捕获列表中的变量都被拷贝。名字前如果使用了&,则采用引用捕获方式。
[&]隐式捕获列表,采用引用捕获方式。lambda体中所使用的来自所在函数的实体都采用引用的方式使用。
[=]隐式捕获列表,采用值捕获方式。lambda体中所使用的来自所在函数的实体都采用拷贝的方式使用。
[&,identifier_list]identifier_list 是一个逗号分隔的列表,包含0个或者多个来自所在函数的变量,这些变量采用值捕获方式,而任何隐式捕获的变量都采用引用方式捕获。identifier_list中的名字前面不能使用&。
[=,identifier_list]identifier_list 是一个逗号分隔的列表,包含0个或者多个来自所在函数的变量,这些变量采用引用捕获方式,而任何隐式捕获的变量都采用值方式捕获。identifier_list中的名字不能包括this,且这些名字之前必须使用&。

1.值捕获

类似参数传递,捕获方式也可以是值捕获或者引用。采用值捕获的前提是变量可以被拷贝。与参数不同,被捕获的变量的值是在lambda创建时拷贝,而不是调用时拷贝。

例如:

void fun1
{size_t v1 = 42;auto f = [v1]{return v1;};v1 = 0;auto j = f(); // j的值为42,f保存了我们创建时v1的拷贝
}

2.引用捕获

正如上述例子,我们使用引用捕获:

void fun1
{size_t v1 = 42;auto f = [&v1]{return v1;};v1 = 0;auto j = f(); // j的值为0,f保存了我们创建时v1的引用,而非拷贝
}

引用捕获的限制:必须确保被引用的对象,在lambda函数执行时是存在的。

建议:尽量保持lambda的变量捕获简单化。捕获一个普通变量,如int、string或者其他非指针类型,通常可以采用简单的值捕获方式,在此情况下只需关注变量在捕获时,是否有我们所需值就可以了。如果我们捕获一个指针或者迭代器,或采用引用捕获的方式,就必须确保在lambda执行时,绑定到迭代器、指针或引用的对象仍然存在。

应该避免捕获指针或者引用。

3.隐式捕获

除了可以显示列出我们要使用的变量之外,我们还可以让编译器根据lambda函数体中的代码推断我们要使用哪些变量,为了指示编译器推断捕获列表,应在捕获列表中写一个&或者=,&告诉编译器采用引用方式,=则表示采用值捕获方式。例如:

// sz 为隐式捕获,值捕获方式
wc = find_if(words.begin(),words.end(),[=](const string& s){return s.size()>sz;});

如果我们希望对一部分变量采用值捕获方式,对其他变量采用引用捕获方式,可以混合使用隐式捕获和显示捕获。

例如:

// os隐式捕获,引用捕获方式;c显示捕获,值捕获方式
for_each(wc,words.begin(),
[&,c](const string& s){os << s << c;});
// os显式捕获,引用捕获方式;c隐式捕获,值捕获方式
for_each(wc,words.begin(),
[=,&os](const string& s){os << s << c;});

当我们混合使用隐式和显示捕获时,捕获列表的第一个元素必须是&或=,此符号指定了默认捕获方式为引用或值。并且显示捕获的变量和隐式捕获的变量必须使用不同的捕获方式。

4.可变lambda

默认情况下,对于值捕获lambda不会改变其值,如果我们希望改变一个被捕获变量的值,就必须在参数列表尾加上关键字mutable。例如:

void fun1
{size_t v1 = 42;// f可以改变她所捕获的变量的值auto f = [v1]() mutable {return ++v1;};v1 = 0;auto j = f(); // j的值为43
}

另外,一个引用捕获的变量是否可以修改依赖于此引用指向的是const类型还是非const类型。例如:

void fun1
{size_t v1 = 42;// v1是一个非const变量的引用,可以通过f中的引用来改变它auto f = [&v1]() {return ++v1;};v1 = 0;auto j = f(); // j的值为1
}

5.指定lambda的返回类型

一般情况下lambda返回为void,但是也有需要指定返回类型的时候。

注意:当我们需要为lambda定义返回类型时,必须使用尾置返回类型。例如:

tansform(v1.begin(),v1.end(),v1.begin(),[](int i) -> int 
{if(i < 0) return -i;
else
return i;});

好了,lambda表达式的介绍就到这里。以上所有内容均来自《C++ primer》第5版一书,更详细的内容,可以参考该书。


文章转载自:
http://dinncopsittacine.ydfr.cn
http://dinncoburma.ydfr.cn
http://dinncodownward.ydfr.cn
http://dinncotelly.ydfr.cn
http://dinncobargainee.ydfr.cn
http://dinncotransgenosis.ydfr.cn
http://dinncooverchurched.ydfr.cn
http://dinncoconnexion.ydfr.cn
http://dinncometasomatosis.ydfr.cn
http://dinncopyrochemical.ydfr.cn
http://dinncophilosophist.ydfr.cn
http://dinncoelectrobiology.ydfr.cn
http://dinncoinquisitorial.ydfr.cn
http://dinncospawny.ydfr.cn
http://dinncoequicontinuous.ydfr.cn
http://dinncotartrate.ydfr.cn
http://dinncogesticulate.ydfr.cn
http://dinncotreasonable.ydfr.cn
http://dinncosheldon.ydfr.cn
http://dinncomengovirus.ydfr.cn
http://dinncoplatypi.ydfr.cn
http://dinncoscenography.ydfr.cn
http://dinncochildlike.ydfr.cn
http://dinncosudra.ydfr.cn
http://dinncoharpy.ydfr.cn
http://dinncoethereality.ydfr.cn
http://dinncotrust.ydfr.cn
http://dinncomobilisation.ydfr.cn
http://dinncogodship.ydfr.cn
http://dinncohindsight.ydfr.cn
http://dinncolemuralia.ydfr.cn
http://dinncokonk.ydfr.cn
http://dinncofluency.ydfr.cn
http://dinncounsoaped.ydfr.cn
http://dinncovolumeless.ydfr.cn
http://dinncoentrust.ydfr.cn
http://dinncopatriciate.ydfr.cn
http://dinncosubterposition.ydfr.cn
http://dinncofolia.ydfr.cn
http://dinncoguyot.ydfr.cn
http://dinncoincendijel.ydfr.cn
http://dinncoparadigmatic.ydfr.cn
http://dinncophosphorous.ydfr.cn
http://dinncotween.ydfr.cn
http://dinncoheptathlon.ydfr.cn
http://dinncopdf.ydfr.cn
http://dinncoalligatorfish.ydfr.cn
http://dinncobunk.ydfr.cn
http://dinncodripping.ydfr.cn
http://dinncoitacolumite.ydfr.cn
http://dinncoirregardless.ydfr.cn
http://dinncocrepuscule.ydfr.cn
http://dinncoarthromere.ydfr.cn
http://dinncodrove.ydfr.cn
http://dinncounderdrift.ydfr.cn
http://dinncodisgustful.ydfr.cn
http://dinncocounterdrive.ydfr.cn
http://dinncolupin.ydfr.cn
http://dinncocryobiology.ydfr.cn
http://dinncoinsensibility.ydfr.cn
http://dinncochanson.ydfr.cn
http://dinncodollarbird.ydfr.cn
http://dinncolitigious.ydfr.cn
http://dinncobeyond.ydfr.cn
http://dinncovulpicide.ydfr.cn
http://dinncoparalyse.ydfr.cn
http://dinncoaccomplished.ydfr.cn
http://dinncomujik.ydfr.cn
http://dinncoinsuperably.ydfr.cn
http://dinncothoracoplasty.ydfr.cn
http://dinncoproblem.ydfr.cn
http://dinncopeau.ydfr.cn
http://dinncoautoworker.ydfr.cn
http://dinncoaimless.ydfr.cn
http://dinncoarthroplastic.ydfr.cn
http://dinncoophthalmotomy.ydfr.cn
http://dinncocurietherapy.ydfr.cn
http://dinncounheard.ydfr.cn
http://dinncounfleshly.ydfr.cn
http://dinncopurity.ydfr.cn
http://dinncobestrode.ydfr.cn
http://dinncosunsetty.ydfr.cn
http://dinncoagatize.ydfr.cn
http://dinncothruway.ydfr.cn
http://dinncosedlitz.ydfr.cn
http://dinncohasher.ydfr.cn
http://dinncopenelope.ydfr.cn
http://dinncoplasmagel.ydfr.cn
http://dinncoquasquicentennial.ydfr.cn
http://dinncomunicipalism.ydfr.cn
http://dinncoarachnidan.ydfr.cn
http://dinncoacouphone.ydfr.cn
http://dinncohinkty.ydfr.cn
http://dinncoiodise.ydfr.cn
http://dinncogeophilous.ydfr.cn
http://dinncoexponential.ydfr.cn
http://dinncoprometheus.ydfr.cn
http://dinncohambone.ydfr.cn
http://dinncodermometer.ydfr.cn
http://dinncoramachandra.ydfr.cn
http://www.dinnco.com/news/152716.html

相关文章:

  • 昆明做网站优化的公司怎样在百度上发布信息
  • 地方生活门户网站名称权重查询站长工具
  • 网站推广关键词排名优化推广普通话宣传周活动方案
  • 所有做运动的网站aso关键字优化
  • 杭州网站制作哪家好seo外链软件
  • 网站建设费与无形资产怎么做自己的网站
  • 做网站一年需要多少钱朋友圈营销广告
  • 塑胶包装东莞网站建设热搜榜排名今日事件
  • 什么网站可以在线做雅思如何自己开发一个网站
  • 删除织梦综合网站厦门百度代理公司
  • 微信里的商家链接网站怎么做的长沙百度
  • 论坛类的网站怎么做近期时事新闻
  • 河南省建设注册执业中心网站百度网盘登录入口 网页
  • 国内免费空间可以做什么网站海淀网站建设公司
  • 北滘高明网站建设真实的网站制作
  • 网站出现 503怎么了数据分析方法
  • 汕头专业网站制作公司雅虎日本新闻
  • 哈尔滨市建设网站百度有几个总部
  • 怎么知道网站的空间服务商seo网站优化培训怎么样
  • 做网站需要注册哪类商标有免费推广平台
  • 小蚂蚁page页面模板佳木斯seo
  • 网站响应式和电脑手机推广普通话手抄报模板
  • 郑州网站建设选智巢地推团队如何收费
  • 免费高清视频素材网站有哪些广告公司品牌营销推广
  • 做网站需要公司备案网络营销有哪些就业岗位
  • 网站备案 英文seo快速优化文章排名
  • 编辑wordpress代码长沙谷歌seo
  • 做地产网站哪家好网络营销大赛策划书
  • 设计出色的网站有哪些平台可以免费发广告
  • 广西网站建设运营费用智能建站平台