inline概念
在c++中,函數(shù)調(diào)用是會(huì)產(chǎn)生額外的時(shí)間開銷的,如果函數(shù)本身代碼很短,執(zhí)行很快,并且該函數(shù)被反復(fù)調(diào)用。相比之下調(diào)用函數(shù)所產(chǎn)生的開銷就會(huì)很大,甚至超過執(zhí)行代碼所產(chǎn)生的開銷。
為了減少函數(shù)調(diào)用的開銷,c++引入了內(nèi)聯(lián)函數(shù)的機(jī)制。編譯器在處理內(nèi)聯(lián)函數(shù)的調(diào)用語句時(shí),直接將整個(gè)內(nèi)聯(lián)函數(shù)代碼插入到調(diào)用語句處,從而減少函數(shù)調(diào)用產(chǎn)生的開銷。
inline定義
inline關(guān)鍵字的使用比較簡單,只需要在函數(shù)的定義頭部加上inline關(guān)鍵字即可,如下所示:
inline 返回值類型 函數(shù)名(參數(shù)){
函數(shù)體
}
內(nèi)聯(lián)函數(shù)的具體使用如下代碼所示:
#include<iostream>
using namespace std;
//返回兩數(shù)中的最大值
inline int max(int a, int b) {
return a > b ? a : b;
}
int main() {
int a = max(2, 3);
return 0;
}
如上代碼所示,定義一個(gè)內(nèi)聯(lián)函數(shù)max,該函數(shù)返回兩個(gè)數(shù)中的最大值,只需要在函數(shù)定義時(shí)加入inline關(guān)鍵字即可,在對(duì)max函數(shù)進(jìn)行調(diào)用時(shí),編譯器直接將max的函數(shù)代碼嵌入到調(diào)用的地方,以此來節(jié)省函數(shù)調(diào)用產(chǎn)生的額外開銷。
inline函數(shù)注意事項(xiàng)
通過上面的例子,我們了解了inline關(guān)鍵字的基本使用方法,內(nèi)聯(lián)函數(shù)雖然節(jié)省了函數(shù)調(diào)用產(chǎn)生的開銷,但并不是所有的地方都能使用內(nèi)聯(lián)函數(shù)定義。
當(dāng)函數(shù)代碼過長時(shí),使用內(nèi)聯(lián)函數(shù)會(huì)使得程序變得臃腫。此時(shí)就不應(yīng)該使用內(nèi)聯(lián)函數(shù)。
另外,當(dāng)函數(shù)中包含循環(huán)控制語句時(shí),也不應(yīng)該使用內(nèi)聯(lián)函數(shù)。