[C++]內嵌函數(inline function)筆記

紀錄並介紹一下inline funciton內嵌函數

前言

 


 

最近寫C++,重新開始複習一些東西,發現內嵌函數也忘了是什麼,於是重新做個筆記~

 

inline內嵌函數

 


 

內嵌函數是在一般的函數前面,加上inline這個關鍵字,例如以下的例子,我要做一個計算平方的函數


int square(int x) { return x*x; }

 

此時只要把inline這個關鍵字加上去變成


inline int square(int x) { return x*x; }

 

多了inline這個關鍵字在前方即為內嵌函數,而他的用意是什麼呢?

內嵌函數是用來加速C++的執行速度,在程式碼的語法上不會有什麼太大的差異,但是在Compiler編譯時,卻會有不一樣的效果

 

inline內前函數的執行過程

 


 

一般而言,當我們撰寫函數,並呼叫使用,電腦的機器語言指令會紀錄目前工作階段的記憶體位址,然後跳至函數的記憶體位置處理完程序後,並回到原先的位址上,而這樣來回會造成時間上的額外負擔。

C++於是提供這種內嵌函數,當我們加入關鍵字時,在編譯時便會把函數中的程式直接展開

 

 

若要使用inline時,要在宣告或定義時加入inline的關鍵字

 

另外,即便加入inline想要使用內嵌函數,編譯時也不一定就會實作,編譯器會選擇,如果你執行的函數中程式碼所需時間大於處理呼叫函數的時間,則能節省的時間比較少,反之若是你的函數中程式碼執行的時間很短,則使用內前函數可以省去較多的呼叫函數的時間,並且如果常常會使用到此函數,使用內嵌的效率也會比較好

 

所以如果你的函數中的程式碼或處理較短,並且常呼叫使用的話,可以給他加上個inline (因為編譯器可能會應你的要求使用)

另外如果是遞迴的程式,使用inline可能編譯器也不會理你(因為裡面的不斷呼叫運算會使編譯器判斷為此函數中程式的行可能會過大)

 

參考資料:

C++ Primer Plus 5/e

 


 

文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)

另外要轉載請附上出處 感謝