調(diào)用函數(shù)時(shí)需要一定的時(shí)間和空間的消耗,一般的程序調(diào)用函數(shù)時(shí)的過程: 1.執(zhí)行函數(shù)中調(diào)用前的語句; 2.轉(zhuǎn)移到被調(diào)用函數(shù)的入口處,同時(shí)進(jìn)行參數(shù)傳遞; 3.執(zhí)行被調(diào)用的函數(shù); 4.帶回被調(diào)用函數(shù)的返回值; 5.接著執(zhí)行主調(diào)函數(shù)中未執(zhí)行的語句。
這樣就要求在轉(zhuǎn)去被調(diào)用函數(shù)之前,要記下當(dāng)時(shí)執(zhí)行的指令的地址和其他相關(guān)信息,一遍在函數(shù)調(diào)用之后繼續(xù)執(zhí)行。在函數(shù)調(diào)用之后,流程返回到先前記下的地址處,并且根據(jù)之前記錄的信息恢復(fù)現(xiàn)場,才能繼續(xù)執(zhí)行。這些都要花費(fèi)一定的時(shí)間。如果有的函數(shù)需要頻繁使用,則所需要的時(shí)間就會(huì)很長,從而降低程序的執(zhí)行效率。
為此,C++提供了一種提高效率的方法,即在編譯時(shí)將所調(diào)用函數(shù)的代碼直接嵌入到主調(diào)函數(shù)中,而不是將流程轉(zhuǎn)出去。這種嵌入到主調(diào)函數(shù)中的函數(shù)稱為內(nèi)置函數(shù)。
指定一個(gè)函數(shù)為內(nèi)置函數(shù),只需在函數(shù)首行的左端加一個(gè)關(guān)鍵詞inline即可。
#include <iostream>using namespace std;inline int max(int,int,int);int main(){ int i = 10,j = 20,k = 30,m; m =max(i,j,k); cout<<"max ="<<m<<endl; getchar(); return 0;}inline int max(int a,int b,int c){ if(b>a) a=b; if(c>a) a=c; return a;}在上述程序中,在聲明和定義函數(shù)max時(shí),都在左端加了關(guān)鍵詞inline,因此編譯系統(tǒng)遇到函數(shù)調(diào)用時(shí),就會(huì)用max函數(shù)體的代碼替換函數(shù)調(diào)用處的語句,在上述程序中就是16-18行代替了第8行進(jìn)行編譯,同時(shí)將實(shí)參代替形參。
需要注意的是:可以在聲明和定義函數(shù)時(shí)同時(shí)寫inline,也可以只在函數(shù)聲明時(shí)加inline,這樣編譯系統(tǒng)也會(huì)把函數(shù)作為內(nèi)置函數(shù)處理。
使用內(nèi)置函數(shù)可以節(jié)約運(yùn)行時(shí)間,但是會(huì)增加目標(biāo)程序的長度,所以作為內(nèi)置函數(shù)的函數(shù)規(guī)模都很小(一般都在5句以下)。同時(shí)內(nèi)置函數(shù)中不能包括復(fù)雜的控制語句,如循環(huán)語句和switch語句。總的來說,哪些規(guī)模比較小而又被頻繁調(diào)用的簡單函數(shù),比較適合聲明為內(nèi)置函數(shù)。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注