我发现MSVC和GCC中的lambdas都是实现一个的函子operator().他们更喜欢函子函数指针的原因是什么?
lee*_*mes 24
问题是C++中的lambda函数可以有一个额外的状态(捕获的变量,也就是上下文),必须为每个实例传递它们(它们可以因为同一个lambda函数的句柄的每个实例而不同).
函数不能将状态耦合到您传递的句柄.如果你要将这样的状态添加到函数指针中,你最终会编写一个需要使用括号语法(operator())来调用的包装器,这恰好是一个仿函数.
一个值得注意的事实是没有捕获的lambda 可以转换为函数指针.这仅仅是可能的,因为它不是需要这样的额外空间.