c ++:vtable是否包含指向非虚函数的指针?

rah*_*hul 8 c++ virtual vtable

vtable包含指向该类的虚函数的指针.它是否也包含指向非虚函数的指针?

谢谢!

CB *_*ley 10

这是一个实现细节,但没有.如果实现将指向非虚函数的指针放入vtable中,则它不能使用这些指针进行函数调用,因为它通常会导致调用不正确的非虚函数.

当调用非虚函数时,实现必须使用调用函数的对象的静态类型来确定要调用的正确函数.存储在由vptr访问的vtable中的函数将取决于对象的动态类型,而不是依赖于它的任何静态类型的引用或指针.


Zde*_*vic 5

不,事实并非如此。

由于对非虚方法的调用可以在编译期间解析(因为编译器知道非虚函数的地址),因此编译器生成指令来“直接”(即静态地)调用它们。

对于编译过程中已知的方法,没有理由经历 vtable 间接机制。