对于一些编译器,如果一个类有虚函数,那么它的 vptr 可以通过其对象的第一个字节的地址来访问。例如,
class Base{
public:
virtual void f(){cout<<"f()"<<endl;};
virtual void g(){cout<<"g()"<<endl;};
virtual void h(){cout<<"h()"<<endl;};
};
int main()
{
Base b;
cout<<"Address of vtbl:"<<(int *)(&b)<<endl;
return 0;
}
我知道它取决于不同的编译器行为。由于存在将 vptr 作为第一个条目存储的情况,这样做有什么好处?这有助于提高性能还是仅仅因为使用 &b 更容易访问 vbtl?