为什么我们不对非虚函数使用同样的方法呢?
我的意思是,为什么我们要以这种方式使用虚函数?难道我们不能将它们作为非virtaul来使用并覆盖它们吗?
如果这种方法可以节省我们的时间/空间,为什么我们不对非虚函数使用同样的方法呢?我的意思是,对于特定的类,有一个函数表是有意义的。
无论如何,提前谢谢,我只是有点迷惑。
发布于 2010-12-21 01:31:23
如果不使用一定程度的间接性,就不能实现运行时多态性。这就是vptr的作用。
vptr不能用于非多态函数,因为这样做会产生一些间接开销。C++的理念是,你不需要为你不使用的东西付费。
编辑:
以下是有关虚拟表的工作原理的一些信息:http://en.wikipedia.org/wiki/Virtual_table
发布于 2010-12-21 01:34:00
编译器本质上生成对非虚方法的直接调用。通过虚方法调用,编译器生成代码来查找方法的地址,然后调用该地址。因此,从理论上讲,它至少是在调用虚函数时再进行一次查找。否则,就没有理由产生这种成本。
发布于 2010-12-21 01:34:07
使用vptr允许基于对象类型而不是变量类型的方法解析。不使用vptr会使方法调用更快。C++设计者决定允许虚拟函数的便利性,但不要求其他函数的性能损失。
https://stackoverflow.com/questions/4492152
复制相似问题