标签: c++ compiler-optimization virtual-functions
最流行的例子来说明虚拟调度在运行时发生的原因是在编译时无法确定哪个Derived类将被创建。例如:
Base* b = (rand() % 2 == 1 ? new Derived1() : new Derived2());
或当它取决于用户输入时。
假设都不是这种情况,并且可以在编译时完全确定基指针引用的Derived类。
如果在编译时知道基类指针指向的Derived类,是否通过用适当的Derived函数替换它并且在运行时没有进行vtable查找来优化虚函数调用?
答案 0 :(得分:12)
这种优化称为虚拟化。至少Clang会执行此操作,请参阅this blog post和this post on mailing list。