內聯與巨集定義

2022-08-05 11:06:15 字數 673 閱讀 3297

**:

巨集定義可以提高效率,但是巨集不是函式。預編譯通過**複製的方式代替函式呼叫,省去了諸如函式壓棧等系統過程,從而提高了效率。但是由於巨集定義僅僅是**替換,所以引起很多問題。

#define  max(a,b)  (a) > (b) ? ( a) : (b)

result=max(a,b) +2  編譯器對其解釋為 (a) > (b) ? (a) : (b)+2 .導致該語句執行與預期不符。

巨集定義的另一個缺點就是無法訪問類的私有成員

而行內函數通過把**直接複製進呼叫函式體內,避免產生某些系統過程,同樣提高了效率,但是行內函數可以進行型別檢查,this指標同樣能應用,這是巨集定義無法比擬的。

行內函數必須是函式的宣告和定義一體,且在函式前面加inline。

1、行內函數在可讀性方面與函式是相同的,而在編譯時是將函式直接嵌入呼叫程式的主體,省去了呼叫/返回指令,這樣在執行時速度更快。

2、行內函數可以除錯,而巨集定義是不可以除錯的。

行內函數與巨集本質上是兩個不同的概念如果程式編寫者對於既要求快速,又要求可讀的情況下,則應該將函式冠以inline。下面詳細介紹一下**一下行內函數與巨集定義。