C++ Lambda闭包的思考

01. 12 月 2017 C++ 0

本来想研究golang中的闭包的,但是不知怎么思路就跑到这来了……

关于闭包的概念,我认为这里讲解的最好:

闭包是由函数和与其相关的引用环境组合而成的实体。比如参考资源中就有这样的的定义:在实现深约束()时,需要创建一个能显式表示引用环境的东西,并将它与相关的子程序捆绑在一起,这样捆绑起来的整体被称为闭包。

早在C++11开始就支持了Lambda闭包,使用的姿势大概是这样的

与我们所常听到的javascript的闭包别无二致,局部变量v可以在其作用域外被访问,实现了累加的效果。但是到这里我们不禁要问一个问题:C++函数中的变量(除了new出来的)都是分配在栈上的,但是函数退出后栈空间被销毁,那么这个v在哪?

OK,我们发现v被移动了位置,lambda中的v已不是原来栈上那个v了。如果我们连同lambda函数的地址也打印出来: