c++ - 为什么 C++ lambda 是用仿函数而不是函数指针实现的?

标签 c++ lambda

我发现 MSVC 和 GCC 中的 lambda 都是实现 operator() 的仿函数。他们更喜欢仿函数而不是函数指针的原因是什么?

最佳答案

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

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

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

关于c++ - 为什么 C++ lambda 是用仿函数而不是函数指针实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20476618/

相关文章:

java - Lambda表达式匿名对象生命周期

c++ - Visual Studio C++ 组合框控件不适用于多字节字符集

c++ - 使用 C++ 库时如何避免包含相同的代码?

c++ - 函数模板重载(不同数据类型验证函数作为参数)

c++ - 如何赋予这个变量全局作用域

c++ - 嵌套 C++ lambda 函数的 header

python - 使用 lambda 和 defaultdict

c++ - 如何在 C/C++ 中的 unsigned char 数组中生成 n 个随机 1?

java - 使用 forEach() 时如何调用实例方法

c++ - 根据模板类型生成 lambda 主体(调用可调用对象并返回)