为什么我们不为非虚拟函数使用相同的方法?

我的意思是,为什么我们以这种方式使用虚拟功能?我们不能将它们用作非Virtaul的人并替代它们吗?

如果此方法节省了我们的时间/空间或何种方法,为什么我们不为非虚拟函数使用相同的方法呢?我的意思是,特定类别的功能表将是有道理的。

无论如何,谢谢,我有点困惑。

有帮助吗?

解决方案

如果不使用间接水平,您将无法有运行时多态性。这就是VPTR的目的。

VPTR不用于非造型功能,因为该间接成本要花费一些。 C ++理念是您不为不使用的东西付费。

编辑:

这是有关虚拟表如何工作的一些信息: http://en.wikipedia.org/wiki/virtual_table

其他提示

编译器实质上是对非虚拟方法的直接调用。使用虚拟方法调用,编译器生成代码以查找方法的地址,然后调用该地址。因此,从理论上讲,在调用虚拟函数时至少还有一个查找。否则,没有理由会产生这一费用。

使用VPTR允许基于对象类型而不是变量类型的方法分辨率。不使用VPTR使方法调用更快。 C ++设计师决定允许虚拟功能的便利性,但不需要其他功能的性能罚款。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top