首頁 > 後端開發 > C++ > 內聯虛擬函數是一個神話,還是只是被誤解了?

內聯虛擬函數是一個神話,還是只是被誤解了?

Patricia Arquette
發布: 2024-12-27 06:39:14
原創
169 人瀏覽過

Are Inline Virtual Functions a Myth, or Just Misunderstood?

內聯虛擬函式真的是神話嗎?

在程式碼審查中,評論「虛擬函數不需要內聯」引發了以下問題:使用內聯虛函數。儘管它們具有潛在的好處,但對其實用性仍有疑問。

在直接在物件上呼叫函數的場景中,內聯虛擬函數可能看起來比較合適。然而,有人可能想知道,如果使用物件來呼叫方法,為什麼還要使用虛擬函數。

下面的程式碼片段舉例說明了這個問題:

class Temp {
public:
    virtual ~Temp() {}
    virtual void myVirtualFunction() const { cout << "Temp::myVirtualFunction" << endl; }
};

class TempDerived : public Temp {
public:
    void myVirtualFunction() const { cout << "TempDerived::myVirtualFunction" << endl; }
};

int main() {
    TempDerived aDerivedObj;
    // Compiler expands virtual functions
    aDerivedObj.myVirtualFunction();

    // Object type for Temp* is known
    Temp* pTemp = &aDerivedObj;
    pTemp->myVirtualFunction();

    return 0;
}
登入後複製

雖然編譯器可以內聯虛函數當已知物件的確切類別(例如,aDerivedObj)時調用,而當透過指標存取物件時則不能這樣做(pTemp)。

這個限制提出了一個問題:內聯虛函數是否應該避免,因為它們的擴展經常受到限制?

答案:

虛擬函數在某些情況下可以內聯,如 C FAQ中所述:

“內聯虛擬調用唯一可以被內聯是指編譯器知道作為虛函數調用目標的對象的“確切類”,只有當編譯器具有實際對象而不是對象的指針或引用時,才會發生這種情況。

以上是內聯虛擬函數是一個神話,還是只是被誤解了?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板