c++ - C++中的函数指针与仿函数

标签 c++ function-pointers functor

使用仿函数和函数指针有什么区别。 例如

  //Functor
  struct add_x
  {
    int x;
    add_x(int y):x(y){}
    int operator()(int y)
    {
       return x+y;
    }
  };
  //Function
  int (func)(int x)
  {
     return ++x;
  }
  std::vector<int> vec();
  //fill vec with 1 2 3 4 5
  int (*f)(int) = func;//Function pointer
  std::transform(vec.begin(),vec.end(),f); //approach 1
  std::transform(vec.begin(),vec.end(),add_x(1)); //approach 2

这两种方法都有效,但我相信在某些情况下,一种方法比其他方法更受欢迎(或可能)。

最佳答案

一方面,仿函数可以包含内部状态;仅对函数对象的 this 调用 有效的状态。您可以将 static 变量添加到您的函数中,但这些变量将用于函数的 any 调用。

其次,编译器可以内联对仿函数的调用;它不能对函数指针做同样的事情。这就是为什么 C++ std::sort() 在性能方面胜过 C qsort() 的废话。

关于c++ - C++中的函数指针与仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37635300/

相关文章:

c++ - 将类成员函数作为参数传递给全局函数

c++ - 指向一个模板化函数的不同实例的指针保证比较不相等?

.NET Action<T> 和 Func<T,U> 等的 Java 等价物

ocaml - OCaml 的解函数器

java - 如何使用 Java 8 编写函数的通用迭代?

c++ - 如何在 Win32 应用程序中填充文件夹浏览器

c++顺时针排序二维点

c++ - OpenCV 导致 EXC_BAD_ACCESS 线程 1 : code=2 crashes in UIApplicationMain

c++ - 无法在 nsight eclipse 中为 nvcc 添加编译器选项

c - 了解函数指针的 C 语法