函数指针直接指向函数,而函数对象重载了 operator() 运算符以实现可调用。两者都是 c++++ 函数调用的有用工具,函数指针高效且无状态,函数对象低效但可带状态。在实战中,函数指针常用于排序函数,函数对象则适用于自定义比较函数。

C++ 函数指针和函数对象的区别与联系
简介
函数指针和函数对象是 C++ 中实现面向对象编程的两个重要工具。它们都用于调用函数,但工作方式和用途不同。
立即学习“C++免费学习笔记(深入)”;
函数指针
函数指针是保存函数地址的变量。它就像一个指向函数的指针。要调用指向函数的函数指针,只需对其进行解引用即可。
语法:
// 声明一个函数指针类型typedef int (*FunctionPointer)(int);// 指向一个函数的函数指针FunctionPointer funcPtr = &myFunction;// 调用指向函数的函数指针int result = funcPtr(arg);
函数对象
函数对象是一个可调用的类,它重载了 operator() 运算符。函数对象类似于函数,可以传递参数并返回结果。
语法:
// 声明一个函数对象类class MyFunctionObject {public: int operator()(int arg) { return arg * 2; }};// 创建函数对象MyFunctionObject funcObj;// 调用函数对象int result = funcObj(arg);
区别
语法指向了函数重载了 operator() 运算符类型裸指针类效率高效低效状态无状态可以有状态
联系
虽然函数指针和函数对象的工作方式不同,但它们都是对 C++ 中函数调用的有用的补充。函数指针非常适合低级编程任务,而函数对象则更适合面向对象编程。
实战案例
排序函数中的函数指针:
#include bool compareDescending(int a, int b) { return a > b;}int main() { std::vector nums = {1, 3, 5, 2, 4}; // 使用函数指针对向量进行降序排序 std::sort(nums.begin(), nums.end(), compareDescending); for (auto num : nums) { std::cout << num << " "; // 输出:5 4 3 2 1 }}
自定义比较函数中的函数对象:
class DescendingComparator {public: bool operator()(int a, int b) const { return a > b; }};int main() { std::vector nums = {1, 3, 5, 2, 4}; // 使用函数对象对向量进行降序排序 std::sort(nums.begin(), nums.end(), DescendingComparator()); for (auto num : nums) { std::cout << num << " "; // 输出:5 4 3 2 1 }}
以上就是C++ 函数指针和函数对象的区别与联系的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1457260.html
微信扫一扫
支付宝扫一扫