虛函式能否是內聯函式

2021-07-11 02:51:28 字數 691 閱讀 5678

內聯函式是在編譯時,將呼叫函式處插入內聯函式的**,省去了函式呼叫時的開銷。

虛函式是通過指標或引用呼叫函式時,通過虛函式表來確定呼叫的函式,在執行時確定。

那麼虛函式是否可以是內聯函式?

以前沒有想過這個問題,表面上看,虛函式不能為內聯函式。我們在類中定義的函式都是內聯函式,析構函式經常在類中定義,而析構函式又經常宣告為虛函式,以前沒有發現什麼問題。

其實虛函式可以為內聯函式,這與內聯函式的定義沒什麼衝突。

內聯函式到底要不要在呼叫處展開取決於怎麼呼叫內聯函式。看下面的例子: 

[cpp]view plain

copy

class

a  virtual

void

print()  

private

:  int

x;  

} ;   如果

[cpp]view plain

copy

a a;  

a.print();  

那麼就會展開為內聯函式。

如果[cpp]view plain

copy

a a;  

a *p=&a;  

p->print();  

那麼就通過虛函式表呼叫,不會展開。

虛函式能否是內聯函式

內聯函式是在編譯時,將呼叫函式處插入內聯函式的 省去了函式呼叫時的開銷。虛函式是通過指標或引用呼叫函式時,通過虛函式表來確定呼叫的函式,在執行時確定。那麼虛函式是否可以是內聯函式?以前沒有想過這個問題,表面上看,虛函式不能為內聯函式。我們在類中定義的函式都是內聯函式,析構函式經常在類中定義,而析構函...

內聯函式能否宣告為虛函式

上c 課的時候記得老師說虛函式的限制有以下四點 1 只有成員函式才能宣告為虛函式,因為虛函式僅適用於有繼承關係的類物件,所以普通函式不能宣告為虛函式 2 虛函式必須是非靜態成員函式,因為靜態成員函式不受限與某個物件 3 內聯函式不能宣告為虛函式,因為內聯函式不能再執行中動態確定其位置 4 建構函式不...

內聯函式 虛函式

在c 中,inline關鍵字和virtual關鍵字分別用來定義c 中的內聯函式和虛函式,他們在各自的場合都有其各自的應用,下面將簡單介紹他們各自的功能,然後在說明為什麼乙個函式不能同時是虛函式和內聯函式 inline 內聯函式的目的是為了減少函式呼叫時間。它是把內聯函式的函式體在編譯器預處理的時候替...