1、const int A = 3; => #define A 3
2、C++中推薦使用內(nèi)聯(lián)函數(shù)替代宏代碼片段
3、C++中使用inline關(guān)鍵字聲明內(nèi)聯(lián)函數(shù) inline int func(int a, int b) { return a < b ? a : b;}
4、內(nèi)聯(lián)函數(shù)聲明時inline關(guān)鍵字必須和函數(shù)定義結(jié)合在一起,否則編譯器會直接忽略內(nèi)聯(lián)請求
5、C++編譯器可以將一個函數(shù)進(jìn)行內(nèi)聯(lián)編譯
6、被C++編譯器內(nèi)聯(lián)編譯的函數(shù)叫做內(nèi)聯(lián)函數(shù)
7、內(nèi)聯(lián)函數(shù)在最終生成的代碼中是沒有定義的
8、C++編譯器直接將函數(shù)體插入函數(shù)調(diào)用的地方
9、內(nèi)聯(lián)函數(shù)沒有普通函數(shù)調(diào)用時的額外開銷(壓棧,跳轉(zhuǎn),返回)
10、C++編譯器不一定準(zhǔn)許函數(shù)的內(nèi)聯(lián)請求!(類似register)
11、內(nèi)聯(lián)函數(shù)是一種特殊的函數(shù),具有普通函數(shù)的特性(參數(shù)檢查,返回類型等)
12、內(nèi)聯(lián)函數(shù)是對編譯器的一種請求,因此編譯器可能拒絕這種請求
13、內(nèi)聯(lián)函數(shù)由編譯器處理,直接將編譯后的函數(shù)體插入調(diào)用的地方
14、宏代碼片段由預(yù)處理器處理,進(jìn)行簡單的文本替換,沒有任何編譯過程
15、現(xiàn)代C++編譯器能夠進(jìn)行編譯優(yōu)化,因此一些函數(shù)即使沒有inline聲明也可能被編譯器內(nèi)聯(lián)編譯
16、另外,一些現(xiàn)代C++編譯器提供了擴(kuò)展語法,能夠?qū)瘮?shù)進(jìn)行強(qiáng)制內(nèi)聯(lián)
17、C++中內(nèi)聯(lián)編譯的限制: 不能存在任何形式的循環(huán)語句 不能存在過多的條件判斷語句 函數(shù)體不能過于龐大 不能對函數(shù)進(jìn)行取址操作 函數(shù)內(nèi)聯(lián)聲明必須在調(diào)用語句之前18、編譯器對于內(nèi)聯(lián)函數(shù)的限制并不是絕對的,內(nèi)聯(lián)函數(shù)相對于普通函數(shù)的優(yōu)勢只是省去了函數(shù)調(diào)用時壓棧, 跳轉(zhuǎn)和返回的開銷。因此,當(dāng)函數(shù)體的執(zhí)行開銷遠(yuǎn)大于壓棧,跳轉(zhuǎn)和返回所用的開銷時,那么內(nèi)聯(lián)將無意義。
19、內(nèi)聯(lián)函數(shù)體內(nèi)最好不要超過五句。
20、符號表C++編譯器自己用的,與最終生成無關(guān)
21、在C++中可以為函數(shù)提供占位參數(shù)
|
新聞熱點(diǎn)
疑難解答