Geekband Week a 一些相關(guān)概念的整理
成員函數(shù):
1.成員函數(shù)能夠直接訪問成員數(shù)據(jù)侯勉,為了防止成員函數(shù)破壞數(shù)據(jù)蒋院,(如必要)應(yīng)在常量成員函數(shù)定義或聲明時(shí)在函數(shù)體前使用const聲明查坪。
例:int get_year() const {...};
2.如果一個(gè)類的某個(gè)成員函數(shù)是私有的霍比,那么它只能被這個(gè)類的其他成員函數(shù)調(diào)用
3.成員函數(shù)的定義擂红,需應(yīng)用 class_name::function_name()的方式媒役,'::'稱為域解析操作符祝谚。
內(nèi)聯(lián)函數(shù)
1.內(nèi)聯(lián)函數(shù)目的是為了提高函數(shù)的執(zhí)行效率,用關(guān)鍵字 inline 放在函數(shù)定義(注意是定義而非聲明)的前面即可將函數(shù)指定為內(nèi)聯(lián)函數(shù)酣衷,內(nèi)聯(lián)函數(shù)通常就是將它在程序中的每個(gè)調(diào)用點(diǎn)上“內(nèi)聯(lián)地”展開交惯,假設(shè)將 max 定義為內(nèi)聯(lián)函數(shù):
inline int max(int a, int b)
{
return a > b ? a : b;
}
則調(diào)用: cout<<max(a, b)<<endl;
在編譯時(shí)展開為: cout<<(a > b ? a : b)<<endl;
2.內(nèi)聯(lián)函數(shù)與宏:
宏的缺點(diǎn):編譯預(yù)處理時(shí),將宏拷貝到代碼內(nèi)部穿仪。在替換過程中容易出現(xiàn)優(yōu)先級(jí)席爽、語句識(shí)別(懸空的else)等問題,而且不可調(diào)試牡借。
內(nèi)聯(lián)函數(shù):編譯器在對(duì)內(nèi)聯(lián)函數(shù)進(jìn)行展開前會(huì)進(jìn)行安全檢查和自動(dòng)類型轉(zhuǎn)換。而且具備了宏的優(yōu)點(diǎn)袭异。
3.應(yīng)將內(nèi)聯(lián)函數(shù)放進(jìn)頭文件:關(guān)鍵字 inline 必須與函數(shù)定義體放在一起才能使函數(shù)成為內(nèi)聯(lián)钠龙,僅將 inline 放在函數(shù)聲明前面不起任何作用。編譯器在調(diào)用點(diǎn)內(nèi)聯(lián)展開函數(shù)的代碼時(shí)御铃,必須能夠找到 inline 函數(shù)的定義才能將調(diào)用函數(shù)替換為函數(shù)代碼碴里,而對(duì)于在頭文件中僅有函數(shù)聲明是不夠的。
4.內(nèi)聯(lián)函數(shù)的弊端:
內(nèi)聯(lián)函數(shù)以“代碼膨脹”為代價(jià)上真,節(jié)省了函數(shù)調(diào)用的開銷咬腋,但是未節(jié)省執(zhí)行函數(shù)體需要的開銷。
所以有兩種形式不適用內(nèi)聯(lián)函數(shù)(編譯器有權(quán)選擇是否編譯為內(nèi)聯(lián)函數(shù)):
1睡互、函數(shù)過長根竿,使總代碼量增大;
2就珠、函數(shù)內(nèi)存在循環(huán)或復(fù)雜結(jié)構(gòu)寇壳,使執(zhí)行函數(shù)開銷大于調(diào)用函數(shù)。