內聯函式的優越性:
一:inline定義的類的內聯函式,函式的**被放入符號表中,在使用時直接進行替換(像巨集定義一樣展開),沒有了呼叫的開銷,效率很高。
二:類的內斂函式是乙個真正的函式。
三:使用內聯函式inline可以完全取代表示式形式的巨集定義。
例子:複製** **如下:
class a
void settest(int i);
};inline vockjzfvrlid a::settwww.cppcns.comest(int i)
;說明:類a的成員函式readtest()和settest()都是內聯函式,readtest()函式的定義體被放在類宣告之中,因而readtest()自動轉換成inline函式,settest函式的定義體在類宣告之外,因此要加上inline關鍵字。
總結inline函式與巨集定義的區別:
1、內斂函式在編譯時展開,而巨集是在預編譯時就展開了
2、在編譯時內斂函式可以直接被嵌入到目標函式**中,而巨集只是乙個簡單的文字替換
3、內斂函式可以完成諸如型別的檢測、語句是否正確等編譯功能,巨集就不具備這種功能
4、巨集不是函式,而inline函式是函式
5、巨集在定義時要小心處理巨集引數,(一般情況是把引數用括www.cppcns.com弧括起來)。
本文標題: 內聯函式inline與巨集定義深入解析
本文位址: /ruanjian/c/99844.html
C 中的內聯函式(inline)與巨集定義
當我們定義完乙個函式之後,實際呼叫的時候,函式體本身會壓入堆疊,主函式再從堆疊裡面把這部分內容提取出來,產生一定的系統開銷,對於大型函式來說,這部分開銷可能相對於函式體本身執行的開銷來說微乎其微。但是如果乙個函式僅僅只是為了完成乙個特別簡單的功能,比如交換兩個變數的值,亦或是求兩個變數的最大值,這時...
define巨集定義與inline內聯的異同
二 define巨集定義與inline內聯 1 內聯函式在可讀性方面與函式是相同的,而在編譯時是將函式直接嵌入呼叫程式的主體,省去了呼叫 返回指令,這樣在執行時速度更快。2 內聯函式可以除錯,而巨集定義是不可以除錯的。內聯函式與巨集本質上是兩個不同的概念如果程式編寫者對於既要求快速,又要求可讀的情況...
內聯函式與巨集定義
用內聯取代巨集 1.內聯可除錯 2.可進行型別安全檢查或自動型別轉換 3.可訪問成員變數。另外,定義在類宣告中的成員函式自動轉化為內聯函式。內聯函式與巨集定義 在c中,常用預處理語句 define來代替乙個函式定義。例如 define max a,b a b a b 該語句使得程式中每個出現max ...