设为首页 加入收藏

TOP

C++ 理解函数对象与lambda表达式(二)
2015-11-21 00:56:06 来源: 作者: 【 】 浏览:4
Tags:理解 函数 对象 lambda 表达式
t& Num){return ((Num % Divisor ) == 0);}

一系列以状态变量的方式传递的参数,也被称为lambda表达式的捕获列表。

6. lambda表达式的通用语法

[StateVar1,StateVar1](Type& param) { // }

如果要在lambda表达式中修改这些状态变量,可添加关键字multable:

[StateVar1, StateVar1](Type& param) multable { // }

这样便可在lambda表达式中修改捕获列表[]中指定的变量,但离开lambda表达式后,这些修改便无效,要确保在lambda表达式内部对状态变量的修改在其外部也有效,应按照引用传递它们:

[&StateVar1, &StateVar1](Type& param) { // }

lambda表达式还可以接受多个输入参数,为此可用逗号分隔:

[StateVar1, StateVar1](Type1& param1,Type2& param2) { // }

如果要向编译器明确指明返回类型,可使用->,如下:

[StateVar1, StateVar1](Type1& param1,Type2& param2)-> ReturnType { return (value or expression); }

最后,复合语句{}可包含多条用分号分割的语句:如下

[StateVar1, StateVar1](Type1& param1,Type2& param2)-> ReturnType { Statement 1; Statement 2;return (value or expression); }

如果lambda表达式包含多行代码,必须显示地指明返回类型。

7. 二元函数对应的lambda表达式

二元函数接受两个参数,还可返回一个值,与之等价的lambda表达式如下:

[...] (Type1& param1,Type2& param2){ // }

8. 二元谓词对应的lambda表达式

返回true或false,可帮助决策的二元函数被称为二元谓词函数。这种谓词可用于std::sort等排序算法。

[...] (Type1& param1,Type2& param2){ return bool expression; }

9. 总结

仅当lambda表达式简洁、高效时才能使用它;

记住lambda表达式总是以[]打头;

除非使用关键字multable进行指定,否则不能修改捕获列表中指定的状态变量;

lambda表达式是实现了operator()的匿名类或结构;

注意使用const对参数进行限定;

lambda表达式的语句块包含多条语句时,要显式的指定返回类型;

不要使用很长的包含多条语句的lambda表达式,而应转而使用函数对象,因为每次使用lambda表达式时,都要重新定义它,这无助于提高代码的重用性。

?

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇poj1222--EXTENDED LIGHTS OUT(高.. 下一篇HDOJ 5338 ZZX and Permutations ..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: