函数指针直接指向函数,而函数对象重载了 operator() 运算符以实现可调用。两者都是 c++++ 函数调用的有用工具,函数指针高效且无状态,函数对象低效但可带状态。在实战中,函数指针常用于排序函数,函数对象则适用于自定义比较函数。
C++ 函数指针和函数对象的区别与联系
简介
函数指针和函数对象是 C++ 中实现面向对象编程的两个重要工具。它们都用于调用函数,但工作方式和用途不同。
立即学习“C++免费学习笔记(深入)”;
函数指针
函数指针是保存函数地址的变量。它就像一个指向函数的指针。要调用指向函数的函数指针,只需对其进行解引用即可。
语法:
1 2 3 4 5 6 7 8 |
|
函数对象
函数对象是一个可调用的类,它重载了 operator() 运算符。函数对象类似于函数,可以传递参数并返回结果。
语法:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
区别
特征 | 函数指针 | 函数对象 |
---|---|---|
语法 | 指向了函数 | 重载了 operator() 运算符 |
类型 | 裸指针 | 类 |
效率 | 高效 | 低效 |
状态 | 无状态 | 可以有状态 |
联系
虽然函数指针和函数对象的工作方式不同,但它们都是对 C++ 中函数调用的有用的补充。函数指针非常适合低级编程任务,而函数对象则更适合面向对象编程。
实战案例
排序函数中的函数指针:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
自定义比较函数中的函数对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|