在C++ 11中使用函数指针

w.b*_*w.b 7 c++ c++11

函数指针的主要原因是提供通用的可调用对象,但在C++ 11中提供它的方法是使用std::function,所以除了与C的兼容性之外,还有什么理由在现代C++中使用函数指针吗?换句话说,是std::function一个现代版本的函数指针,与std::arrayvs内置数组完全一样吗?

TNA*_*TNA 4

是的,我更喜欢std::function几乎所有地方,但在少数情况下,大小开销和间接性std::function可能不可接受。对于像包装在 中的函数指针这样的小型可调用对象std::function,通常没有额外的间接寻址,也没有动态内存分配,因为可调用对象适合 ,std::functionstd::function可能很大,无法容纳更大的可调用对象,因此可能会产生很大的空间开销。

  • std::function 的主要目的是类型擦除和适应。函数指针有严格的类型。std::function 是一个多态函数包装器,它可以绑定到自由函数、类静态函数、成员函数,并且可以用于部分函数应用等。如果您不需要所有这些,它可能不是适合这项工作的工具,类型擦除并不是免费的,通常涉及虚拟调用和堆分配(尽管通常有一个小的缓冲区优化)。 (2认同)