C++11当中的的lambda和closure是同一个概念吗

C++语言 码拜 9年前 (2016-04-17) 1681次浏览
cppreference的网站上,讲述direct_initialization的时候,说道closure的参数抓取:[](){…}
这个应该说是lambda的参数抓取才对吧,为什么说是闭包的参数抓取呢?

本人查了一下C++11的标准文档,第一个出现closure这个词语的地方是5.1.2 lambda express,它说:
The evaluation of a lambda-expression results in a prvalue temporary (12.2). This temporary is called the
closure object. A lambda-expression shall not appear in an unevaluated operand (Clause 5). [ Note: A
closure object behaves like a function object (20.8). — end note ]

对lambda表达式求值,得到一个prvalue,这个临时对象是一个闭包对象。
问一下什么叫做对lambda表达式求值,是在编译过程中,编译器的求值,还是编译生成以后,运行时的求值?

到底怎么样理解这一句话呢?

解决方案

5

lambda的意思是匿名函数,而closure指的是lambda捕获变量的功能。另外lambda表达式的底层实现叫closure对象。

10

感觉好像有些地方也会简单地把能捕获变量的匿名函数称为closure。Java好像就是这样… 不过C++里并没混着用。

20

lambda表达式仅仅就是一种表达式而已,它是源代码的一部分。编译器对这种表达式求值后生成一个只能作为右值的临时对象(即closure对象)。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++11当中的的lambda和closure是同一个概念吗
喜欢 (0)
[1034331897@qq.com]
分享 (0)