inline函式是c++引入的機制,目的是解決使用巨集定義的一些缺點。
用它替代巨集定義,消除巨集定義的缺點。巨集定義使用預處理器實現,做一些簡單的字元替換,因此不能進行引數有效性的檢測。另外它的返回值不能被強制轉換為可轉換的合適型別,且c++中引入了類及類的訪問控制,在涉及到類的保護成員和私有成員就不能用巨集定義來操作。
(1)inline函式**是被放到符號表中,使用時像巨集一樣展開,沒有呼叫的開銷效率很高;
(2)inline函式是真正的函式,所以要進行一系列的資料型別檢查;
(3)inline函式作為類的成員函式,可以使用類的保護成員及私有成員;
(1)使用巨集定義的地方都可以使用inline函式;
(2)作為類成員介面函式來讀寫類的私有成員或者保護成員;
內聯函式以**複雜為代價,它以省去函式呼叫的開銷來提高執行效率。所以一方面如果內聯函式體內**執行時間相比函式呼叫開銷較大沒有太大的意義;另一方面每一處內聯函式的呼叫都要複製**,消耗更多的記憶體空間,因此以下情況不宜使用內聯函式。
(1)函式體內的**比較長,將導致記憶體消耗代價;
(2)函式體內有迴圈,函式執行時間要比函式呼叫開銷大;
另外類的構造與析構函式不要寫成內聯函式。
(1)內聯函式在編譯時展開,巨集在預編譯時展開;
(2)內聯函式直接嵌入到目標**中,巨集是簡單的做文字替換;
(3)內聯函式有型別檢測、語法判斷等功能,而巨集沒有;
(4)inline函式是函式,巨集不是;
(5)巨集定義時要注意書寫(引數要括起來)否則容易出現歧義,內聯函式不會產生歧義;
巨集和c 中的inline內聯函式
inline函式是c 引入的機制,目的是解決使用巨集定義的一些缺點。1.為什麼要引入內聯函式 內聯函式的作用 用它替代巨集定義,消除巨集定義的缺點。巨集定義使用預處理器實現,做一些簡單的字元替換因此不能進行引數有效性的檢測。另外它的返回值 不能被強制轉換為可轉換的合適 型別,且c 中引入了類及類的訪...
C 之inline內聯函式
inline內建函式又叫內聯函式。使用的時候在函式前加上inline,該函式就被生命為內建函式。每當程式中出現對該函式的呼叫時,c 編譯器使用函式體中的 插入到呼叫該函式的語句之處,而不是將流程轉出去,同時用實參代替形參,以便在程式執行時不再進行函式呼叫。引入內建函式的目的就是 消除呼叫時系統的開銷...
inline內聯函式和巨集的區別
1 內聯函式在編譯時展開,而巨集在預編譯時展開 2 在編譯的時候,內聯函式直接被嵌入到目標 中去,而巨集只是乙個簡單的文字替換。3 內聯函式可以進行諸如型別安全檢查 語句是否正確等編譯功能,巨集不具有這樣的功能。4 巨集不是函式,而inline是函式 5 巨集在定義時要小心處理巨集引數,一般用括號括...