函数指针,函数对象和lambda函数有什么区别?

时间:2012-08-30 18:38:08

标签: c++ c++11

我知道每个都可以传递给另一个函数。在我看来,所有这些都像是微妙差异的替代品。

  1. 函数指针:指向函数的指针

  2. function object:重载了()运算符的类的实例;能够充当一种功能;

  3. lambda函数:一个匿名函数(在C ++ 11中新引入),可以在现场定义,只存在于语句的生命周期中

  4. 由于微妙之处,我想知道在给定场景中哪3种选择中哪一种最合适。那么,那里的专家,在一些选择标准上提出了一些启示(以某些选择标准?),以便我可以在不同的场景中决定和使用它们。

1 个答案:

答案 0 :(得分:6)

函数对象:可以使用f语法调用的对象f(x)。这包括函数指针,具有重载operator()的类对象或函数指针/引用的转换函数。

标准有一个直截了当的定义

  

函数对象类型是一种对象类型(3.9),它可以是函数调用中的postfix-expression的类型(5.2.2,13.3.1.1)。函数对象是函数对象类型的对象。

特别是,函数函数引用不是函数对象,即使它们是可调用实体。有些人混淆了术语“函数对象”,并将其视为仅具有重载operator()的类型对象。

函数指针:一个错误的指向函数的指针

lambda函数:我想你是指C ++ 11 lambdas。这些不是真正的函数,而是具有重载operator()的特殊编译器生成的类类型函数对象。