说明为什么虚拟分派(dispatch)发生在运行时的最流行的例子是当编译时无法确定将创建哪个派生类。例如:
Base* b = (rand() % 2 == 1 ? new Derived1() : new Derived2());
或者当它取决于用户输入时。
假设情况并非如此,并且可以在编译时完全确定基指针指的是哪个派生类。
如果在编译时知道基类指针指向哪个 Derived 类,编译器是否通过用适当的 Derived 函数替换它来优化虚函数调用并且在运行时不进行 vtable 查找?
最佳答案
这种优化称为去虚拟化。至少 Clang 执行它,请参阅 this blog post和 this post on mailing list .
关于c++ - 虚函数调用的编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50815642/