为什么C++ lambda用functor而不是函数指针实现?

bab*_*l92 10 c++ lambda

我发现MSVC和GCC中的lambdas都是实现一个的函子operator().他们更喜欢函子函数指针的原因是什么?

lee*_*mes 24

问题是C++中的lambda函数可以有一个额外的状态(捕获的变量,也就是上下文),必须为每个实例传递它们(它们可以因为同一个lambda函数的句柄的每个实例而不同).

函数不能将状态耦合到您传递的句柄.如果你要将这样的状态添加到函数指针中,你最终会编写一个需要使用括号语法(operator())来调用的包装器,这恰好是一个仿函数.

一个值得注意的事实是没有捕获的lambda 可以转换为函数指针.这仅仅是可能的,因为它不是需要这样的额外空间.


Ker*_* SB 9

函数没有状态,因此它们无法实现lambdas所需的功能.

此外,你可以保证lambdas有一个独特的类型,你不能单独使用它.