6

我知道每个都可以传递给另一个函数。在我看来,他们都喜欢有细微差别的替代品。

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

  2. 函数对象:已重载 () 运算符的类的实例;能够发挥作用;

  3. lambda 函数:一个匿名函数(在 C++11 中新引入),可以在现场定义,并且仅在它所属的语句的生命周期内存在

由于微妙之处,我想知道这 3 个选择中的哪一个在给定场景中最合适。所以,那里的专家,请提供一些信息(关于一些选择标准?),以便我可以在不同的场景中决定和使用它们。

4

1 回答 1

7

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

该标准对其有一个直接的定义

函数对象类型是一种对象类型 (3.9),它可以是函数调用 (5.2.2, 13.3.1.1) 中后缀表达式的类型。函数对象是函数对象类型的对象。

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

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

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

于 2012-08-30T21:49:39.637 回答