前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ 11之lambda表达式

C++ 11之lambda表达式

作者头像
zy010101
发布2019-05-25 20:02:22
9530
发布2019-05-25 20:02:22
举报
文章被收录于专栏:程序员程序员

版权声明:本文为博主原创文章,转载请注明博客地址: https://cloud.tencent.com/developer/article/1433402

C++11之Lambda表达式

最近在学习Qt时,遇到了lambda表达式,特地总结一篇

C++11引入了Lambda表达式,自此,我们在支持C++11标准的编译器中也可以使用匿名函数了。

GCC 4.5.X和MSVC 10以后的版本都支持了Lambda表达式。GCC默认不开启C++11支持,因此我们在使用C++11标准时需要加入 -std = c++11

Lambda表达式的语法如下:

–>int {return x * y;};

[]是lambda表达式的引入符(后面会解释这个引入符的),由于是匿名函数,所以就没有名字。()表示参数列表。int是lambda表达式的返回值。{}里面是函数体。当lambda表达式函数体语句很简单时,可以不指定返回值,此时将会制动推断返回值。

下面在看一个例子:std::cout << { return std::abs(f); } (-3.33) << endl;

这条语句将会输出3.33。-3.33作为参数被传递到f。该例子的返回值就是自动推断的。这种语法就是声明一个lambda表达式,接着马上调用。

cout << ->int {return std::abs(f); }(-3.33) << endl;

这条语句制定了返回值为int类型。所以它的值变成了3,而不是3.33。

引入lambda表达式的语法: int val = 3;

auto lambda = & -> int { return val * 100; };

cout << lambda() << endl;

使用关键字auto即可。在这个例子中我们注意到方括号内有个“&”,这个方括号和其内部的符号共同构成了lambda表达式的引入符。这个引入符可以获取和它相同范围内的变量的值。

 [] // 不捕获任何外部变量

 = // 以值的形式捕获所有外部变量

 & // 以引用形式捕获所有外部变量

 x, &y // x 以传值形式捕获,y 以引用形式捕获

 =, &z// z 以引用形式捕获,其余变量以传值形式捕获

 &, x // x 以值的形式捕获,其余变量以引用形式捕获

当以值的形式捕获时,我们不能修改原变量的值,当以引用形式捕获时,我们的操作可以改变变量的值。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年06月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档