所有c++ coder都应该为这个语法感到高兴,说的直白一点,Lambda 表达式就是函数对象的语法糖。
还是直接看对比栗子吧,抄袭的是msdn的官网
该示例使用 for_each 函数调用中嵌入的 lambda 向控制台打印 vector 对象中的每个元素是偶数还是奇数。
使用lambda
1 | #include <algorithm> |
使用Function Object
1 | #include <algorithm> |
正如微软文档所言,这两种在效率上并没有实质性的差距,我自己也测试了,不管在debug模式下还是release模式下,果然没有差距。
无意中我在晚上发现了bind和Lambda对比测试,前三种方式是网上的,后面两种是我自己加的,结果绝对让我蛋碎了一地。
1 | #include <cstdint> |
debug模式:
Accumulate (lambda) 100000000 422885105
Accumulate (bind) 100000000 4346676523
Accumulate (bound lambda) 100000000 1707092933
Accumulate (class function) 100000000 494674507
Accumulate (bind auto) 100000000 3381097610
Release模式
Accumulate (lambda) 100000000 17978
Accumulate (bind) 100000000 607188485
Accumulate (bound lambda) 100000000 520421500
Accumulate (Function Object) 100000000 1925
Accumulate (bind auto) 100000000 1726
编译器:APPLE LLVM5.1
c++就是这样让人蛋疼,随便一个东西,初学者都可以写5中写法,那大神下,至少可以写10种以上,效率上的差距也是大的惊人,我还是那句话c++应该做减法了。