inline內聯函數
函數的調用,想必大家都用過,一個函數在被另一個函數調用的時候,才有生命,才會為其準備對應的內存空間,再調用完畢之後再清理釋放結束。
我們可以看到,每一次的函數呼叫都會帶來一些時間和空間上的花銷。而自訂函數的一個作用,也是為了提高程式碼的重用性,可以在需要的時候隨時調用,提高開發效率。那麼,一個程式碼本身就不多,又頻繁被呼叫的函數,我們就該好好想想,這樣做到底合算不合算了。
還好,C++已經幫我們考慮到這個問題,為我們提供了內聯的機制,即仍然使用自定義函數,但在編譯的時候,把函數代碼插入到函數調用處,從而免去函數調用的一系列過程,像普通順序執行的程式碼一樣,來解決這個問題!
那麼用法也非常簡單,只需要在函數定義的前面加上關鍵字inline聲明就可以了,如下列程式碼:
#include<iostream>usingnamespacestd;inlineintMax(inta,intb){returna>b?a:b;}intmain(){cout<<Max(3,5)<<endl;cout<<Max(7,9)< <endl;return0;}
值得說明的是,內聯函數的定義要在呼叫之前出現,才可以讓編譯器在編譯期間了解上下文,進行程式碼替換。除此之外,內聯函數與register變數類似,只是我們提給編譯器的一個請求,最終是否真正會實現內聯,由編譯器根據情況自行選擇。