为什么我们不对非虚函数使用同样的方法呢?
我的意思是,为什么我们要以这种方式使用虚函数?我们不能将它们用作非虚拟的并覆盖它们吗?
如果这种方法可以节省我们的时间/空间或其他任何东西,为什么我们不对非虚拟函数使用相同的方法呢?我的意思是,对于特定的类会有一个函数表是有道理的。
无论如何,提前谢谢,我只是有点困惑。
如果不使用间接级别,就不能拥有运行时多态性。这就是 vptr 的用途。
vptr 不用于非多态函数,因为这种间接需要一些成本。C++ 的哲学是你不用为不用的东西付费。
编辑:
以下是有关虚拟表如何工作的一些信息:http ://en.wikipedia.org/wiki/Virtual_table
编译器本质上生成对非虚拟方法的直接调用。通过虚拟方法调用,编译器生成代码来查找方法的地址,然后调用该地址。因此,理论上,调用虚函数时至少要多查找一次。否则就没有理由产生这笔费用。
使用 vptr 允许基于对象类型而不是变量类型的方法解析。不使用 vptr 会使方法调用更快。C++ 设计者决定允许虚函数的便利性,但不要求其他函数的性能损失。