首页 >后端开发 >C++ >std::function 与函数指针:什么时候应该选择什么?

std::function 与函数指针:什么时候应该选择什么?

Linda Hamilton
Linda Hamilton原创
2024-11-11 19:22:03502浏览

std::function vs. Function Pointers: When Should You Choose What?

使用 std::function,除非有令人信服的理由不使用

在 C 中使用回调函数时,可以选择使用C 风格的函数指针和较新的 std::function 可能是一个有争议的问题。让我们来看看每个选项的优缺点。

C 风格函数指针:

  • 优点:调用时没有开销函数。
  • 缺点:无法捕获上下文变量,限制了它们的使用场景。

std::function:

  • 优点:可以捕获上下文变量,使其更加通用。
  • 缺点:调用函数时引入少量开销。

何时使用 std::function:

在大多数情况下,std::function 是首选。它比函数指针更灵活且面向未来。除非有特定的性能问题,否则通常建议使用 std::function 来传递回调。

何时使用函数指针:

如果性能至关重要考虑到回调函数不需要捕获任何上下文变量,那么函数指针可能是更好的选择。不过这种情况比较少见。

第三个选项:模板参数

如果您希望回调函数是任何可调用对象,请考虑使用模板参数。这种方法提供了灵活性,但需要在标头中实现外部函数。

汇总表:

Feature Function Pointer std::function Template Parameter
Can capture context No Yes Yes
Call overhead None Small None
Can be inlined No No Yes
Can be stored in class member Yes Yes No
Implemented outside of header Yes Yes No
Supported without C 11 standard Yes No Yes
Readability Poor Good Fair

结论:

总的来说,std::function 的优点超过了函数指针。它更加灵活、面向未来且可读。仅当存在特定性能问题或回调函数不需要捕获任何上下文变量时才使用函数指针。

以上是std::function 与函数指针:什么时候应该选择什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn