我发现 MSVC 和 GCC 中的 lambda 都是实现 operator()
的仿函数。他们更喜欢仿函数而不是函数指针的原因是什么?
最佳答案
问题是 C++ 中的 lambda 函数可以有一个额外的状态(捕获的变量也称为上下文),必须为每个实例传递(对于同一 lambda 函数的句柄的每个实例,它们可能不同)。
函数不能将状态耦合到您传递的句柄。如果您要将这样的状态添加到函数指针,您最终会编写一个需要使用括号语法 (operator()
) 调用的包装器,这恰好是仿函数。
一个值得注意的事实是,没有捕获的 lambda 可以转换为函数指针。这是可能的,因为它不需要需要这样的额外空间。
关于c++ - 为什么 C++ lambda 是用仿函数而不是函数指针实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20476618/