原因之一是需要运行时多态。不精确地说,很多时候我们有这种需求: 当前逻辑需要一些依赖标签/类型自身的操作,而不依赖的部分适合提出来作为函数。此时标签/类型的相关操作就要从外面“输入”。(或者说在“泛型”或“多态”面对的场合)
如果标签或类型本身能在编译时鉴别,那么确实不需要写函数指针,用函数名就够了。不过我们可能会有另外一些需求:
需要把不同标签/类型放到“同质”的东西(如容器)里处理,或者已经被放进去了;即类型擦除 有些标签/类型在当前翻译单元/模块未知,不能直接调用其相关函数 希望承载主体逻辑的函数对于不同类型只有一份二进制实例 这时候就需要一种专门的数据,顺着其值可以调用不同的函数,这样才能满足运行时多态的需求。
这种数据成为专门的数据类型时就是函数指针。有些语言会用内嵌于对象的虚表指针或多态胖指针进行运行时多态,就实现上来说它们也免不了等价于函数指针的部分。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。