inline函式和virtual函式有著本質的區別

2021-06-18 15:59:42 字數 634 閱讀 1854

inline函式和virtual函式有著本質的區別,inline函式是在程式被編譯時就展開,在函式呼叫處用整個函式體去替換,而virtual函式是在執行期才能夠確定如何去呼叫的,因而inline函式體現的是一種編譯期機制,virtual函式體現的是一種執行期機制。

因此,內聯函式是個靜態行為,而虛函式是個動態行為,他們之間是有矛盾的。

函式的inline屬性是在編譯時確定的, 然而,virtual的性質則是在執行時確定的,這兩個不能同時存在,只能有乙個選擇,檔案中宣告inline關鍵字只是對編譯器的建議,編譯器是否採納是編譯器的事情。

我並不否認虛函式也同樣可以用inline來修飾,但你必須使用物件來呼叫,因為物件是沒有所謂多型的,多型只面向行為或者方法,但是c++編譯器,無法保證乙個內聯的虛函式只會被物件呼叫,所以一般來說,編譯器將會忽略掉所有的虛函式的內聯屬性。

相關知識點:

什麼函式不能宣告為虛函式?

乙個類中將所有的成員函式都盡可能地設定為虛函式總是有益的。

設定虛函式須注意: 

1:只有類的成員函式才能說明為虛函式; 

2:靜態成員函式不能是虛函式; 

3:內聯函式不能為虛函式; 

4:建構函式不能是虛函式; 

5:析構函式可以是虛函式,而且通常宣告為虛函式。

成員函式既是inline又是virtual型別

inline型別表示在編譯時期進行函式展開,用函式體在函式呼叫出代替函式的呼叫 而vitual是c 多型的必要條件,但是要想表現出多型,必須要等到執行時,才知道真正呼叫的是哪乙個函式。表面上看這兩個關鍵字如果同時使用,會產生錯誤,但不會的。先簡單說一下虛表的機制 多型的實現是由虛表加以支援的,凡是有...

inline函式 C 內聯函式 inline

inline要起作用,必須要與函式定義放在一起,而不是函式的宣告 inline 當編譯器處理呼叫內聯函式的語句時,不會將該語句編譯成函式呼叫的指令,而是直接將整個函式體的 插人呼叫語句處,就像整個函式體在呼叫處被重寫了一遍一樣,在執行時是順序執行,而不會進行跳轉。優點 內聯函式沒有執行函式呼叫的開銷...

內聯inline函式和引用

inline函式 函式呼叫點 直接展開 文字替換 沒了開棧和清棧的開銷,效率高 inline int sum int a,int b return a b 1.inline 函式和普通函式的區別 inline函式只能在本檔案可見 2.inline函式和static修飾的函式的區別 有呼叫函式的開銷 ...