C C 中inline內聯函式的特性

2021-09-13 11:02:51 字數 788 閱讀 5075

相當於把內聯函式裡面的內容寫在呼叫內聯函式處;

相當於不用執行進入函式的步驟,直接執行函式體;

相當於巨集,卻比巨集多了型別檢查,真正具有函式特性;

不能包含迴圈、遞迴、switch 等複雜操作;

類中除了虛函式的其他函式都會自動隱式地當成內聯函式

將 inline 函式體複製到 inline 函式呼叫點處;

為所用 inline 函式中的區域性變數分配記憶體空間;

將 inline 函式的的輸入引數和返回值對映到呼叫方法的區域性變數空間中;

如果 inline 函式有多個返回點,將其轉變為 inline 函式**塊末尾的分支(使用 goto)。

優點:內聯函式同巨集函式一樣將在被呼叫處進行**展開,省去了引數壓棧、棧幀開闢與**,結果返回等,從而提高程式執行速度。

內聯函式相比巨集函式來說,在**展開時,會做安全檢查或自動型別轉換(同普通函式),而巨集定義則不會。

在類中宣告同時定義的成員函式,自動轉化為內聯函式,因此內聯函式可以訪問類的成員變數,巨集定義則不能。

內聯函式在執行時可除錯,而巨集定義不可以。

缺點:**膨脹。內聯是以**膨脹(複製)為代價,消除函式呼叫帶來的開銷。如果執行函式體內**的時間,相比於函式呼叫的開銷較大,那麼效率的收穫會很少。另一方面,每一處內聯函式的呼叫都要複製**,將使程式的總**量增大,消耗更多的記憶體空間。

inline 函式無法隨著函式庫公升級而公升級。inline函式的改變需要重新編譯,不像 non-inline 可以直接鏈結。

是否內聯,程式設計師不可控。內聯函式只是對編譯器的建議,是否對函式內聯,決定權在於編譯器。

inline 內聯函式

一 inline關鍵字用來定義乙個類的內聯函式,引入它的主要原因是用它替代c中表示式形式的巨集定義。表示式形式的巨集定義一例 define expressionname var1,var2 var1 var2 var1 var2 為什麼要取代這種形式呢,且聽我道來 1 首先談一下在c中使用這種形式巨...

inline內聯函式

技術類筆試題50 都會問巨集與inline的區別,自己去找找看?1 巨集替換發生在預編譯 2 巨集函式 如果可以這麼叫的話 替換時不會檢查引數,inline函式會檢查 3 巨集一定會發生替換,inline貌似不是強制的,編譯器想不替換也沒關係 4 巨集替換時存在著一些不可避免的陷阱 參見c trap...

inline內聯函式

一 內聯函式 內聯函式是指用inline關鍵字修飾的函式 它與普通函式所不同之處只在於函式呼叫的處理。普通 函式進行呼叫時,要將程式執行權轉到被呼叫函式中,然後再返回到呼叫它的函式中 內聯函式不是在呼叫時發生執行權轉移,而是在編譯時將 函式 體 嵌入在每乙個呼叫處。編譯時類似巨集替換,使用 函式體替...