Ben*_*igt 17
Lambdas实际上只是一个仿函数的语法糖.你可以自己完成:定义一个新类,使成员变量保存捕获的值和引用,在构造函数中挂起它们,编写operator()()
,最后创建一个实例并传递它.或者你可以使用一个代码为1/10的lambda并且工作原理相同.
不捕获的Lambda可以转换为函数指针.所有lambdas都可以转换为std::function
或者获得自己独特的类型,这种类型适用于接受仿函数的模板算法.
Edw*_*nge 11
好吧,你实际上是在问一堆不同的问题,可能是因为你并不完全熟悉术语.我会尽力回答所有问题.
lambda和"operator()"之间有什么区别? - 让我们改写一下,"lambda和带有operator()的对象有什么区别?"
基本上没什么.主要区别在于lambda表达式创建功能对象,而具有operator()的对象是功能对象.最终结果类似于考虑相同但可以使用(params)语法调用的实体.
闭包和仿函数有什么区别?这也很困惑.请查看此链接:
http://en.wikipedia.org/wiki/Closure_(computer_programming) http://en.wikipedia.org/wiki/Closure_(computer_programming)#C.2B.2B
因此,正如您所看到的,闭包是一种"仿函数",它在一个范围内定义,以便它吸收该范围内可用的变量.换句话说,它是一个在程序运行期间动态构建的函数,并且该构建过程由包含它的范围的运行时值参数化.因此,在C++中,闭包是lambda,它使用构建lambda的函数中的值.
lambda和接受函数/函子的模板参数有什么区别? - 这再次混淆了.不同之处在于它们真的没什么两样.接受函数/函子的模板"参数"已经混淆了措辞,所以我假设"参数"你的意思是"函数",因为参数不接受任何东西.在这种情况下,尽管lambda可以接受一个仿函数作为参数,但它不能被模板化,一个.二,通常lambda是作为参数传递给接受仿函数参数的函数的一个.
闭包只是一个具有一些设置对象状态(范围?)的仿函数?
正如你可以通过上面的链接看到的,没有.事实上,封闭甚至没有状态,真的.基于UPON构建它的其他实体的状态构建闭包,在该仿函数中虽然这不是状态,但它是对象的结构.
这些结构的"杀手级应用"是什么?或者也许是典型的用例?
我会改写一下,"为什么这些东西有用?"
好吧,一般来说,如果任何对象具有operator(),则将其视为函数的能力对于整个事物非常有用.首先,它允许我们通过使用对象或自由函数来扩展任何stdlib算法的行为.无法消除这方面的大量有用资源.
更具体地说,lambda表达式,它们只是简化了这个过程.对象定义所施加的限制使得在某些情况下使用stdlib算法的过程效率稍低(从开发使用的角度来看,而不是程序效率).首先,至少任何作为参数传递给模板的对象都必须在外部定义.我相信这也在改变,但仍然......必须创建整个对象只是为了执行基本的东西,只在一个地方使用,是不方便的.Lambda表达式允许该定义非常容易,在其使用的地方范围内等等......
归档时间: |
|
查看次数: |
2559 次 |
最近记录: |