快速提问:非虚拟函数是否会导致在具有其他虚函数的类中进行vtbl查找的成本?例如:
Class A
{
virtual void init();
void update();
};
Class B : public A
{
void init();
}
A* = new B();
A->init();
while(true)
{
A->update();
}
更新调用会产生vtbl查找的成本吗?此代码对性能非常敏感,因此我需要避免虚函数调用。谢谢!
答案 0 :(得分:3)
没有。 update()不会在vtable中。维基百科有这样的说法:“请注意,那些在声明中没有携带关键字virtual的函数......通常不会出现在vtable中。默认构造函数对特殊情况有异常。”
答案 1 :(得分:1)
如果不在非虚函数中调用虚函数,则不涉及vtbl查找。