如果函數已經被聲明為inline, 內聯函數已經在編譯期間它的調用點上就被展開;
而虛擬函數調用的決定則要等到運行時刻在執行程序內部的每個調用點上系統根據被調用對象的實際基類或派生類的類型來決定選擇哪一個虛擬函數實例.
內聯不是強制性的,你只是向編譯器提出這個建議,允許它在可以內聯的時候采取內聯形式。
而虛函數本身就是一個函數,只是在多態的情況下,它要到執行時才能確定調用的函數,所以這樣的特性阻止了虛函數的內聯。
但,要注意,只是在多態的情況下(多態不用我解釋吧)。如果是靜態的調用,編譯器還是會采用內聯的形式的。
對於虛函數,內聯可能是不成功的。但語言規則上,決沒有說虛函數就不能定義在類內部,或用inline修飾。只是多半這樣的修飾不產生作用而已。