內聯函數使用的是inline標識函數,是一種利用适度的空間膨脹來換取較高的執行速度,內聯函數與預處理宏有相同
的地方,編譯器會在調用內聯函數的地方將函數展開直接將內聯函數代碼嵌入調用的地方,這样解决了使用預處理宏函數
的缺陷.
#define max(a,b) ((a) > (b) ? (a) : (b)) //要是這也做變量要加括號,不然後果很難知道
如在使用的過程中,int a = 5,b = 4;
max(++a,b); //a自加2次,執行比較一次,輸出一次
max(++a,b+5); // a自加1次,就比較那一次
可以使用函數實現這個預處理宏函數,使用模板可以适用任何類型
template<class T>
inline const T& max(const T& a, const T& b)
{
return (a > b ? a : b);
}
將類的成員定義为內聯函數,有兩種方式,一種是聲明函數在類中,定義在類外時,在定義函數時,在函數前加上
inline標識,另外一種是直接在類中定義,默認为內聯函數
class A
{
private:
int i;
public:
A(int i){this.i = i} //默認为內聯函數
void print();
};
inline void A::print()
{
std::cout<< i << std::endl;
}
在使用內聯函數時,每次調用內聯函數,內聯函數都將展開,每次內存中都會存在增加一份內聯函數代碼內存空間,所
以如果代碼數據比較大時不要經常調用內聯函數,而且當內聯函數代碼處理的數據比較多時,編譯器一般是把內聯函數當
成普通函數編譯.
From:CSDN
留言列表