2011-06-16 98 views
2

快速提問:非虛函數是否會在具有其他虛函數的類中產生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

它沒有明確說明或標籤,但我們應該認爲這是C++? – 2011-06-16 21:43:04

回答

2

No. update()不在vtable中。維基百科有這樣的說法:「請注意,那些不在其聲明中攜帶虛擬關鍵字的函數......通常不會出現在vtable中,對於由默認構造函數提出的特殊情況,也有例外。」

http://en.wikipedia.org/wiki/Virtual_method_table

0

如果您不在非虛函數內調用虛函數,則不涉及vtbl查找。