inline內(nèi)聯(lián)函數(shù)
函數(shù)的調(diào)用,想必大家都用過,一個函數(shù)在被另一個函數(shù)調(diào)用的時候,才有生命,才會為其準(zhǔn)備對應(yīng)的內(nèi)存空間,再調(diào)用完畢之后再清理釋放結(jié)束。
我們可以看到,每一次的函數(shù)調(diào)用都會帶來一些時間和空間上的花銷。而自定義函數(shù)的一個作用,也是為了提高代碼的重用性,可以在需要的時候隨時調(diào)用,提高開發(fā)效率。那么,一個代碼本身就不多,又頻繁被調(diào)用的函數(shù),我們就該好好想想,這樣做到底合算不合算了。
好在,C++已經(jīng)幫我們考慮到這個問題,為我們提供了內(nèi)聯(lián)的機制,即仍然使用自定義函數(shù),但在編譯的時候,把函數(shù)代碼插入到函數(shù)調(diào)用處,從而免去函數(shù)調(diào)用的一系列過程,像普通順序執(zhí)行的代碼一樣,來解決這個問題!
那么用法也非常簡單,只需要在函數(shù)定義的前面加上關(guān)鍵字inline聲明就可以了,如以下代碼:
#include<iostream> using namespace std; inline int Max(int a,int b) { return a>b?a:b; } int main() { cout<<Max(3,5)<<endl; cout<<Max(7,9)<<endl; return 0; }
值得說明的是,內(nèi)聯(lián)函數(shù)的定義要在調(diào)用之前出現(xiàn),才可以讓編譯器在編譯期間了解上下文,進行代碼替換。除此以外,內(nèi)聯(lián)函數(shù)與register變量類似,僅僅是我們提給編譯器的一個請求,最終是否真正會實現(xiàn)內(nèi)聯(lián),由編譯器根據(jù)情況自行選擇。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導(dǎo)課程