首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我们甚至需要VPTR?

为什么我们甚至需要VPTR?
EN

Stack Overflow用户
提问于 2010-12-21 01:27:46
回答 3查看 331关注 0票数 1

为什么我们不对非虚函数使用同样的方法呢?

我的意思是,为什么我们要以这种方式使用虚函数?难道我们不能将它们作为非virtaul来使用并覆盖它们吗?

如果这种方法可以节省我们的时间/空间,为什么我们不对非虚函数使用同样的方法呢?我的意思是,对于特定的类,有一个函数表是有意义的。

无论如何,提前谢谢,我只是有点迷惑。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-21 01:31:23

如果不使用一定程度的间接性,就不能实现运行时多态性。这就是vptr的作用。

vptr不能用于非多态函数,因为这样做会产生一些间接开销。C++的理念是,你不需要为你不使用的东西付费。

编辑:

以下是有关虚拟表的工作原理的一些信息:http://en.wikipedia.org/wiki/Virtual_table

票数 6
EN

Stack Overflow用户

发布于 2010-12-21 01:34:00

编译器本质上生成对非虚方法的直接调用。通过虚方法调用,编译器生成代码来查找方法的地址,然后调用该地址。因此,从理论上讲,它至少是在调用虚函数时再进行一次查找。否则,就没有理由产生这种成本。

票数 2
EN

Stack Overflow用户

发布于 2010-12-21 01:34:07

使用vptr允许基于对象类型而不是变量类型的方法解析。不使用vptr会使方法调用更快。C++设计者决定允许虚拟函数的便利性,但不要求其他函数的性能损失。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4492152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档