Posted on 2007-08-13 10:24
寶杉 閱讀(214)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
C++
內(nèi)聯(lián)函數(shù):既增加安全性,又可以調(diào)用類(lèi)的數(shù)據(jù)成員。
故C++中,用內(nèi)聯(lián)取代所有宏,但在Debug版本中,assert是例外。
assert不產(chǎn)生任何副作用,調(diào)用函數(shù)會(huì)引起內(nèi)存、代碼的變動(dòng),所以assert是宏。
內(nèi)聯(lián)格式:
void Foo(int x, int y);
inline void Foo(int x, int y) // inline與函數(shù)定義體放在一起
{
…
}
用于實(shí)現(xiàn)的關(guān)鍵字,而非用于聲明的關(guān)鍵字。
在類(lèi)中的規(guī)范格式:
class A
{
public:
void Foo(int x, int y);
}
// 定義文件
inline void A::Foo(int x, int y)
{
…
}
什么情況不適合使用內(nèi)聯(lián)?
1 內(nèi)聯(lián)函數(shù)代碼較長(zhǎng),導(dǎo)致內(nèi)存消耗較高。
2 內(nèi)聯(lián)函數(shù)包括循環(huán),執(zhí)行內(nèi)聯(lián)函數(shù)代碼比調(diào)用函數(shù)的開(kāi)銷(xiāo)大。
F:為什么構(gòu)造和解析函數(shù)不使用內(nèi)聯(lián)?
Q:因?yàn)槲鰳?gòu)函數(shù)可能“隱藏”一些行為,例如執(zhí)行基類(lèi)或成員對(duì)象的析構(gòu)過(guò)程。
有時(shí)候編譯器會(huì)自動(dòng)取消一些不值得的內(nèi)聯(lián),所以在聲明時(shí)不寫(xiě)inline是合理的。