行內函數與巨集
阿新 • • 發佈:2019-02-11
求兩個整數和的巨集
#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由編譯器決定。