內聯函式是在編譯時,將呼叫函式處插入內聯函式的**,省去了函式呼叫時的開銷。
虛函式是通過指標或引用呼叫函式時,通過虛函式表來確定呼叫的函式,在執行時確定。
那麼虛函式是否可以是內聯函式?
以前沒有想過這個問題,表面上看,虛函式不能為內聯函式。我們在類中定義的函式都是內聯函式,析構函式經常在類中定義,而析構函式又經常宣告為虛函式,以前沒有發現什麼問題。
其實虛函式可以為內聯函式,這與內聯函式的定義沒什麼衝突。
內聯函式到底要不要在呼叫處展開取決於怎麼呼叫內聯函式。看下面的例子:
class a
virtual void print()
{ cout<
a a;
a.print();
那麼就會展開為內聯函式。如果
a a;
a *p=&a;
p->print();
那麼就通過虛函式表呼叫,不會展開。 虛函式能否是內聯函式
內聯函式是在編譯時,將呼叫函式處插入內聯函式的 省去了函式呼叫時的開銷。虛函式是通過指標或引用呼叫函式時,通過虛函式表來確定呼叫的函式,在執行時確定。那麼虛函式是否可以是內聯函式?以前沒有想過這個問題,表面上看,虛函式不能為內聯函式。我們在類中定義的函式都是內聯函式,析構函式經常在類中定義,而析構函...
內聯函式能否宣告為虛函式
上c 課的時候記得老師說虛函式的限制有以下四點 1 只有成員函式才能宣告為虛函式,因為虛函式僅適用於有繼承關係的類物件,所以普通函式不能宣告為虛函式 2 虛函式必須是非靜態成員函式,因為靜態成員函式不受限與某個物件 3 內聯函式不能宣告為虛函式,因為內聯函式不能再執行中動態確定其位置 4 建構函式不...
內聯函式 虛函式
在c 中,inline關鍵字和virtual關鍵字分別用來定義c 中的內聯函式和虛函式,他們在各自的場合都有其各自的應用,下面將簡單介紹他們各自的功能,然後在說明為什麼乙個函式不能同時是虛函式和內聯函式 inline 內聯函式的目的是為了減少函式呼叫時間。它是把內聯函式的函式體在編譯器預處理的時候替...