c++ - 虚函数调用的编译器优化

标签 c++ compiler-optimization virtual-functions

说明为什么虚拟分派(dispatch)发生在运行时的最流行的例子是当编译时无法确定将创建哪个派生类。例如:

Base* b = (rand() % 2 == 1 ? new Derived1() : new Derived2());

或者当它取决于用户输入时。

假设情况并非如此,并且可以在编译时完全确定基指针指的是哪个派生类。

如果在编译时知道基类指针指向哪个 Derived 类,编译器是否通过用适当的 Derived 函数替换它来优化虚函数调用并且在运行时不进行 vtable 查找?

最佳答案

这种优化称为去虚拟化。至少 Clang 执行它,请参阅 this blog postthis post on mailing list .

关于c++ - 虚函数调用的编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50815642/

相关文章:

c++ - 在同一个 C++ 项目中链接两个不同版本的 protobuf 库

c++ - 确定树的内部路径长度 (C++)

c++ - 使用模板化运算符重载 XOR 运算符失败

c - 如何编写编译器 "understandable"C 代码?

C++继承/重定义错误

c++ - 无法理解 C++ `virtual`

c++ - 基于集合派生对象中存在的类型选择行为的模式

c++ - 通过网络同步视频播放

visual-c++ - 用循环优化除以零 VC++ 2015

c++ - LTO、去虚拟化和虚拟表