1. 程式人生 > >行內函數與巨集

行內函數與巨集

求兩個整數和的巨集

#define Sum(nNoA,nNoB)((nNoA)+(nNoB))

巨集在預處理時把巨集程式碼展開,不需要類似函式似的儲存現場和恢復現場,執行效率而言更高。這也是C語言中大量使用巨集的原理。

巨集也有兩面性,如巨集不能訪問物件的私有成員;容易引起二義性。

行內函數是C++為了提高函式的執行效率而引進的一種特殊的函式。避免了巨集的一些負面效應。

隱式內聯:

Class CTime

{

public:

CTime();

~CTime();

void Show(){cout<<m_nTime;}

private:

time_t m_nTime;

}

顯示內聯:

//.h

Class CTime

{

public:

CTime();

~CTime();

void Show();

private:

time_t m_nTime;

}

//.cpp

CTime::CTime{}

CTime::~CTime(){}

inline void CTime:: Show()

{

cout<<m_nTime;

}

缺點

1、雖然可以提高程式碼執行效率,但是如果程式碼過多或者過多使用巨集和行內函數,會佔用大量記憶體。

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

使用注意事項:

1、如果函式體包含迴圈語句,執行包含迴圈語句的函式體程式碼代價較高;

2、函式為遞迴函式。遞迴函式涉及巢狀,行內函數是無法巢狀展開的。一般行內函數會轉換為普通函式執行。

3、不要隨便將建構函式和解構函式的定義體放在類宣告中。

4、函式是否進行inline由編譯器決定。

總結:只有程式碼行數為1~5行,不包含迴圈、遞迴的函式才可以最終進行inline。沒達到要求的,編譯器不一定將對此函式進行inline。