inline和巨集之間的區別

2022-03-20 05:07:55 字數 902 閱讀 6109

inline函式是c++引入的機制,目的是解決使用巨集定義的一些缺點。

1.為什麼要引入內聯函式(內聯函式的作用)

用它替代巨集定義,消除巨集定義的缺點。巨集定義使用預處理器實現,做一些簡單的字元替換因此不能進行引數有效性的檢測。另外它的返回值不能被強制轉換為可轉換的合適型別,且c++中引入了類及類的訪問控制,在涉及到類的保護成員和私有成員就不能用巨集定義來操作。

2.inline相比巨集定義有哪些優越處

(1)inline函式**是被放到符號表中,使用時像巨集一樣展開,沒有呼叫的開銷效率很高;

(2)inline函式是真正的函式,所以要進行一系列的資料型別檢查;

(3)inline函式作為類的成員函式,可以使用類的保護成員及私有成員;

3.inline函式使用的場合

(1)使用巨集定義的地方都可以使用inline函式;

(2)作為類成員介面函式來讀寫類的私有成員或者保護成員;

4.為什麼不能把所有的函式寫成inline函式

內聯函式以**複雜為代價,它以省去函式呼叫的開銷來提高執行效率。所以一方面如果內聯函式體內**執行時間相比函式呼叫開銷較大沒有太大的意義;另一方面每一處內聯函式的呼叫都要複製**,消耗更多的記憶體空間,因此以下情況不宜使用內聯函式。

(1)函式體內的**比較長,將導致記憶體消耗代價;

(2)函式體內有迴圈,函式執行時間要比函式呼叫開銷大;

另外類的構造與析構函式不要寫成內聯函式。

5.內聯函式與巨集定義區別

(1)內聯函式在編譯時展開,巨集在預編譯時展開;

(2)內聯函式直接嵌入到目標**中,巨集是簡單的做文字替換;

(3)內聯函式有型別檢測、語法判斷等功能,而巨集沒有;

(4)inline函式是函式,巨集不是;

(5)巨集定義時要注意書寫(引數要括起來)否則容易出現歧義,內聯函式不會產生歧義;

C 中inline內聯函式和巨集之間的區別

inline函式是c 引入的機制,目的是解決使用巨集定義的一些缺點。用它替代巨集定義,消除巨集定義的缺點。巨集定義使用預處理器實現,做一些簡單的字元替換,因此不能進行引數有效性的檢測。另外它的返回值不能被強制轉換為可轉換的合適型別,且c 中引入了類及類的訪問控制,在涉及到類的保護成員和私有成員就不能...

inline內聯函式和巨集的區別

1 內聯函式在編譯時展開,而巨集在預編譯時展開 2 在編譯的時候,內聯函式直接被嵌入到目標 中去,而巨集只是乙個簡單的文字替換。3 內聯函式可以進行諸如型別安全檢查 語句是否正確等編譯功能,巨集不具有這樣的功能。4 巨集不是函式,而inline是函式 5 巨集在定義時要小心處理巨集引數,一般用括號括...

inline和巨集定義

inline關鍵字 但使用 keil4 arm編譯測試未過,驗證了巨集定義和內聯函式的區別,自己總結 巨集定義和內聯函式都不生成 段,程式執行也沒有引數壓棧開銷 內聯函式檢查呼叫引數的合法性,也可以進行引數型別轉換 一 inline 關鍵字用來定義乙個類的內聯函式,引入它的主要原因是用它替代c中表示...