为什么我们使用std ::函数在C ++中,而不是原来的C函数指针? [重复] 为什么我们使用s

2019-06-14 15:22发布

这个问题已经在这里有一个答案:

  • 我应该使用std ::函数或C ++函数指针? 5个回答

什么是优势std::function<T1(T2)>在原始T1 (*)(T2)

Answer 1:

std::function可以持有多函数指针,即函数子多。

#include <functional>

void foo(double){}

struct foo_functor{
  void operator()(float) const{}
};

int main(){
  std::function<void(int)> f1(foo), f2((foo_functor()));
  f1(5);
  f2(6);
}

在Ideone活生生的例子。

如上例所示,您也不必完全相同的签名,只要它们是兼容的 (即参数类型std::function可以传递给所包含的功能/仿函数)。



Answer 2:

std::function可以保持功能对象(包括lambda表达式),以及函数指针与正确的签名。 因此,它是更通用。



Answer 3:

除了整洁的外观和更具描述性的语法, std::function可以存储任何可调用对象:

  • 功能
  • lambda表达式
  • 绑定表达式
  • 函子

更何况,存储,复制和对象绑定到成员函数更容易,更直观。



文章来源: Why do we use std::function in C++ rather than the original C function pointer? [duplicate]