【发布时间】:2013-11-13 18:28:07
【问题描述】:
我想编写一个可选地接受 lambda 以自定义其行为的类方法。所以在使用这个类时,我想知道我是否需要担心 lambda 本身超出范围?
lambda 不会引用任何外部变量,所以我不担心变量的范围,只担心 lambda 本身的范围,我会在类中存储一个引用。
我是否需要担心 lambda 本身的创建方式/位置?
【问题讨论】:
-
我认为函数本身永远不会超出范围。 lambda 只是 Functor 对象的闪亮语法。它将归结为一个函数指针。不要持有对 lambda 的引用,而是保留一份副本。如果捕获列表为空,它会很便宜。
-
一般来说,最好用代码示例来解决这类问题。
-
它是一个自己独特的类类型的实例。它遵循与任何其他实例相同的对象生命周期规则。您是否需要对此“担心”完全取决于您如何使用它,而我们对此一无所知。
-
函子通常应该按值处理,而不是按引用处理。 Lambda 表达式只是创建函子的一种便捷方式,因此您也应该将 lambda 的结果作为值来处理。