define:定義預(yù)編譯時(shí)處理的宏;
只進(jìn)行簡(jiǎn)單的字符替換,無(wú)類型檢測(cè)
typedef:定義類型別名 用于處理復(fù)雜類型
例: typedef int A;
則:A a; //定義a為int
inline:內(nèi)聯(lián)函數(shù)對(duì)編譯器提出建議,是否進(jìn)行宏替換,編譯器有權(quán)拒絕
既為提出申請(qǐng),不一定會(huì)成功
inline
1) 產(chǎn)生背景
inline這個(gè)關(guān)鍵字的引入原因和const十分相似,inline 關(guān)鍵字用來(lái)定義一個(gè)類的內(nèi)聯(lián)函數(shù),引入它的主要原因是用它替代C中
表達(dá)式形式的宏定義。
表達(dá)式形式的宏定義一例:
#defineExpressionName(Var1,Var2) (Var1+Var2)*(Var1-Var2)
這種表達(dá)式形式宏形式與作用跟函數(shù)類似,但它使用預(yù)編譯器,沒(méi)有堆棧,使用上比函數(shù)高效。但它只是預(yù)編譯器上符號(hào)表的簡(jiǎn)單替換,不能進(jìn)行參數(shù)有效性檢測(cè)及使用C++類的成員訪問(wèn)控制。
inline 推出的目的,也正是為了取代這種表達(dá)式形式的宏定義,它消除了它的缺點(diǎn),同時(shí)又很好地繼承了它的優(yōu)點(diǎn)。inline代碼放入預(yù)編譯器符號(hào)表中,高效;它是個(gè)真正的函數(shù),調(diào)用時(shí)有嚴(yán)格的參數(shù)檢測(cè);它也可作為類的成員函數(shù)。
2) 具體作用
直接在class類定義中定義各函數(shù)成員,系統(tǒng)將他們作為內(nèi)聯(lián)函數(shù)處理;成員函數(shù)是內(nèi)聯(lián)函數(shù),意味著:每個(gè)對(duì)象都有該函數(shù)一份獨(dú)立的拷貝。
在類外,如果使用關(guān)鍵字inline定義函數(shù)成員,則系統(tǒng)也會(huì)作為內(nèi)聯(lián)函數(shù)處理;
iOS內(nèi)聯(lián)函數(shù)實(shí)戰(zhàn)測(cè)試(僅供參考)
#define (宏名要替換的代碼)
宏定義,保存在預(yù)編譯器的符號(hào)表中,執(zhí)行高效;作為一種簡(jiǎn)單的符號(hào)替換,不進(jìn)行其中參數(shù)有效性的檢測(cè)
typedef (已有類型 新類型)
別名, 常用于創(chuàng)建平臺(tái)無(wú)關(guān)類型, typedef 在編譯時(shí)被解釋,因此讓編譯器來(lái)應(yīng)付超越預(yù)處理器能力的文本替換