c11標(biāo)準(zhǔn)正式版pdf c 11lambda函數(shù)是不是內(nèi)聯(lián)的?
c 11lambda函數(shù)是不是內(nèi)聯(lián)的?這本來是用來替換參數(shù)宏的,因為宏是由預(yù)處理器處理的,編譯器不知道,所以會有一些問題。因此,設(shè)計了一個內(nèi)聯(lián)函數(shù),用參數(shù)替換宏,這樣編譯器就可以接管“工作”,這樣就
c 11lambda函數(shù)是不是內(nèi)聯(lián)的?
這本來是用來替換參數(shù)宏的,因為宏是由預(yù)處理器處理的,編譯器不知道,所以會有一些問題。因此,設(shè)計了一個內(nèi)聯(lián)函數(shù),用參數(shù)替換宏,這樣編譯器就可以接管“工作”,這樣就可以進(jìn)行類型檢查,并且參數(shù)不會被多次求值。
但一般來說,inline關(guān)鍵字只是對編譯器的建議。如果編譯器認(rèn)為函數(shù)足夠復(fù)雜(即函數(shù)體的代價遠(yuǎn)高于函數(shù)調(diào)用的代價),它就不會內(nèi)聯(lián)。
如何規(guī)范地使用C 內(nèi)聯(lián)函數(shù)?
1. 合理的經(jīng)驗法則是不要內(nèi)聯(lián)超過10行的函數(shù)。
2。不要將析構(gòu)函數(shù)定義為內(nèi)聯(lián)函數(shù)(即使它沒有添加內(nèi)聯(lián)函數(shù))。小心使用析構(gòu)函數(shù)。析構(gòu)函數(shù)通常比它的表面長,因為有隱藏成員和基類析構(gòu)函數(shù)被調(diào)用
! 3. 另一個實用的經(jīng)驗法則是內(nèi)聯(lián)包含循環(huán)或語句的函數(shù)通常不值得損失(除非在大多數(shù)情況下,這些循環(huán)或語句永遠(yuǎn)不會被執(zhí)行)。
4。遞歸函數(shù)不應(yīng)內(nèi)聯(lián)聲明。
5。虛擬函數(shù)和遞歸函數(shù)通常不會內(nèi)聯(lián)。
c 什么時候需要使用內(nèi)聯(lián)函數(shù)?
1。內(nèi)聯(lián)函數(shù)可以減少CPU開銷,提高程序2的整體性能。有兩種方法可以聲明內(nèi)聯(lián)函數(shù)。一種是在函數(shù)前面使用inline關(guān)鍵字,另一種是在類內(nèi)部定義函數(shù)代碼。這樣的函數(shù)會自動轉(zhuǎn)換成內(nèi)聯(lián)函數(shù),不需要在函數(shù)中內(nèi)聯(lián),如果函數(shù)包含循環(huán)、switch或goto語句、遞歸函數(shù)和靜態(tài)函數(shù),可以看出內(nèi)聯(lián)函數(shù)和成員函數(shù)沒有區(qū)別,但是如何加快函數(shù)的執(zhí)行速度呢函數(shù)。