c 語言中有巨集函式的概念。巨集函式的特點是內嵌到呼叫**中去,避免了
函式呼叫的開銷。但是由於巨集函式的處理發生在預處理階段,缺失了語法檢測
和有可能帶來的語意差錯。
3.2.1 內聯函式基本概念
c++提供了 inline 關鍵字,實現了真正的內嵌。
特點:1)內聯函式宣告時inline關鍵字必須和函式定義結合在一起,否則編譯器會直
接忽略內聯請求
2)c++編譯器直接將函式體插入在函式呼叫的地方。
3)內聯函式沒有普通函式呼叫時的額外開銷(壓棧,跳轉,返回)。
4)內聯函式是一種特殊的函式,具有普通函式的特徵(引數檢查,返回型別
等)。5)內聯函式由編譯器處理,直接將編譯後的函式體插入呼叫的地方,
巨集**片段由預處理器處理,進行簡單的文字替換,沒有任何編譯過程。
6)c++中內聯編譯的限制:
不能存在任何形式的迴圈語句
不能存在過多的條件判斷語句
函式體不能過於龐大
不能對函式進行取址操作
函式內聯宣告必須在呼叫語句之前
7)編譯器對於內聯函式的限制並不是絕對的,內聯函式相對於普通函式的優
勢只是省去了函式呼叫時壓棧,跳轉和返回的開銷。因此,當函式體的執行開
銷遠大於壓棧,跳轉和返回所用的開銷時,那麼內聯將無意義。
3.2.2 內聯函式 vs 巨集函式
優點: 內嵌**,闢免壓棧與出棧的開銷
缺點: **替換,易使⽣生成**體積變⼤大,易產⽣生邏輯錯誤。
#define sqr(x) ((x)*(x))
優點: ⾼高度抽象,避免重複開發
缺點: 壓棧與出棧,帶來開銷
3.2.3 內聯函式總結
優點:避免呼叫時的額外開銷(入棧與出棧操作)
代價:由於內聯函式的函式體在**段中會出現多個「副本」,因此會增加**
段的空間。
本質:以犧牲**段空間為代價,提高程式的執行時間的效率。
適用場景:函式體很「小」,且被「頻繁」呼叫。
內聯函式的語法: 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關鍵字修飾的函式 它與普通函式所不同之處只在於函式呼叫的處理。普通 函式進行呼叫時,要將程式執行權轉到被呼叫函式中,然後再返回到呼叫它的函式中 內聯函式不是在呼叫時發生執行權轉移,而是在編譯時將 函式 體 嵌入在每乙個呼叫處。編譯時類似巨集替換,使用 函式體替...