说明为什么虚拟分派在运行时发生的最流行的例子是当无法在编译时确定将创建哪个派生类时。例如:
Base* b = (rand() % 2 == 1 ? new Derived1() : new Derived2());
或者当它取决于用户输入时。
假设情况并非如此,并且可以在编译时完全确定基指针引用的是哪个派生类。
如果在编译时就知道基类指针指向哪个派生类,编译器是否优化了虚函数调用通过用适当的派生函数替换它并且在运行时不进行虚函数表查找?
这种优化称为去虚拟化。至少 Clang 执行它,请参阅这篇博文 and 邮件列表上的这篇文章.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)