C 內聯函式與巨集定義的區別

2021-07-29 05:31:40 字數 752 閱讀 1648

c++ primer 5th editon p213 消除(函式呼叫)執行時開銷

內聯函式與巨集定義的區別

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

編譯器會對內聯函式的引數型別做安全檢查或自動型別轉換(同普通函式),而巨集定義則不會;

內聯函式可以訪問類的成員變數,巨集定義則不能;

在類中宣告同時定義的成員函式,自動轉化為內聯函式。

c++ 語言的函式內聯機制既具備巨集**的效率,又增加了安全性,而且可以自由操作類的資料成員。

慎用內聯:

內聯是以**膨脹(複製)為代價,僅僅省去了函式呼叫的開銷,從而提高函式的執行效率。如果執行函式體內**的時間,相比於函式呼叫的開銷較大,那麼效率的收穫會很少。另一方面,每一處內聯函式的呼叫都要複製**,將使程式的總**量增大,

(1)如果函式體內的**比較長,使用內聯將導致記憶體消耗代價較高。

(2)如果函式體內出現迴圈,那麼執行函式體內**的時間要比函式呼叫的開銷大。

《空間換時間》在程式編譯時,編譯器將程式中出現的內聯函式的呼叫表示式用內聯函式的函式體來進行替換。顯然,這種做法不會產生轉去轉回的問題,但是由於在編譯時將函式休中的**被替代到程式中,因此會增加目標程式**量,進而增加空間開銷,而在時間代銷上不象函式呼叫時那麼大,可見它是以目標**的增加為代價來換取時間的節省。

內聯函式與巨集定義區別

內聯函式和普通函式相比可以加快程式的執行效率,因為它不需要中斷呼叫,在編譯的時候內聯函式可以直接被鑲嵌到目標 中。而巨集只是在預處理階段乙個簡單的字元替換。內聯函式需要做型別檢查,這是相比巨集的乙個優勢。巨集是在 處不加任何驗證的簡單替代,而內聯函式是將 直接插入呼叫處,而減少了普通函式呼叫時的資源...

內聯函式與巨集定義的區別

內聯函式與巨集的區別 inline一般只用於如下情況 1 乙個函式不斷被重複呼叫 2 函式只有簡單的幾行,且不包含for while switch等語句。一般而言,寫小程式沒有必要使用inline,但是如果要完成乙個工程專案,當乙個簡單函式被呼叫多次時,應考慮使用inline 常用的一些巨集定義 1...

C 內聯函式與巨集定義

用內聯取代巨集 1.內聯可除錯 2.可進行型別安全檢查或自動型別轉換 3.可訪問成員變數。另外,定義在類宣告中的成員函式自動轉化為內聯函式。文章 一 內聯函式與巨集定義 在c中,常用預處理語句 define來代替乙個函式定義。例如 define max a,b a b a b 該語句使得程式中每個出...