2013-03-04 40 views
6

最近我一直在做很多的閱讀,同時涉及繼承(和虛函數),我一直在「內聯」關鍵字中徘徊。現在我知道在正常意義上內聯是什麼 - 編譯器可以用精確的代碼替換函數調用。然而,我所看到的關於繼承的次數是否有一些在繼承中使用內聯的特殊原因?我不明白爲什麼它一直被提及......繼承和內聯?

內聯函數在繼承/派生類/虛函數中有什麼額外的作用?

+0

@BillyONeal我不認爲這個鏈接真正解釋了什麼是連接(如果有的話)。 – user997112 2013-03-04 23:02:22

+1

再一次....這不是重複的。我在問什麼是鏈接......這個問題是問是否將內聯放在虛函數上是毫無意義的......對於那些知道答案的人來說,容易找到一個類似於答案的問題 - 但是, t意思是相同的。我不知道答案,並閱讀其他問題沒有幫助。 – user997112 2013-03-04 23:08:32

回答

2

是的,在虛擬功能上使用內聯是浪費時間。虛擬函數必須通過由函數指針組成的虛擬函數表來調用。內聯函數不能被指針調用。它必須作爲一個真正的功能存在。

有一些例外。調用者知道確切的對象類型時,可以完全跳過虛函數表。

過度使用虛擬關鍵字可能導致代碼非常慢。在編譯器可能能夠內聯和優化三個或四個小函數調用的情況下,使用虛函數,它必須執行實際的函數調用,不會假設內存或調用之間的註冊狀態。