宏定義可以提高效率,但是宏不是函數。預編譯通過代碼復制的方式代替函數調用,省去了諸如函數壓棧等系統過程,從而提高了效率。但是由于宏定義僅僅是代碼替換,所以引起很多問題。
#define MAX(a,b) (a) > (b) ? ( a) : (b)
result=MAX(A,B) +2 編譯器對其解釋為 (a) > (b) ? (a) : (b)+2 .導致該語句執行與預期不符。
宏定義的另一個缺點就是無法訪問類的私有成員。
而內聯函數通過把代碼直接復制進調用函數體內,避免產生某些系統過程,同樣提高了效率,但是內聯函數可以進行類型檢查,this指針同樣能應用,這是宏定義無法比擬的。
內聯函數必須是函數的聲明和定義一體,且在函數前面加inline。