c++內聯函式
1、什麼是內聯函式
內聯函式是c++的增強特性之一,用來降低程式的執行時間。當內聯函式收到編譯器的指示時,即可發生內聯:編譯器將使用函式的定義體來替代函式呼叫語句,這種替代行為發生在編譯階段而非程式執行階段。
值得注意的是,內聯函式僅僅是對編譯器的內聯建議,編譯器是否覺得採取你的建議取決於函式是否符合內聯的有利條件。如何函式體非常大,那麼編譯器將忽略函式的內聯宣告,而將內聯函式作為普通函式處理。
2、為什麼使用內聯函式
定義函式的時候,在函式的最前面以關鍵字「inline」宣告函式,即可使函式稱為內聯宣告函式
#include #includeusing namespace std;
inline int root(int n)
bool prime(int n )
return true;
}int main()
{ int n =11;
string result;
result = prime(n)?"true":"false";
cout《例如上面的**中,我們要判斷乙個數是否是素數;for迴圈的結束條件每一次都是去呼叫root函式開平方。呼叫函式,就需要拷貝,傳參,壓棧出棧,效率很低。
通過inline宣告,編譯器在編譯的時候首先在呼叫出使用函式體本身的語句替換掉函式呼叫語句,然後進行編譯。這樣就不需要進行函式跳轉,效率會高一些。
3、內聯函式優缺點分析
3.1、優點:
3.1.1、可以通過替換**避免函式呼叫帶來的開銷,提高程式執行的效率(壓棧出棧,返回資料等的開銷)
3.1.2、通過將函式宣告為內聯,你可以把函式定義放在標頭檔案內 。
3.2、缺點:
3.2.1、因為**的擴充套件,內聯函式增大了可執行程式的體積 。
3.2.2、c++內聯函式的展開是中編譯階段,這就意味著如果你的內聯函式發生了改動,那麼就需要重新編譯**。 (尤其是比較大的專案,稍微動一下,需要編譯很久)
3.2.3、當你把內聯函式放在標頭檔案中時,它將會使你的標頭檔案資訊變多,不過標頭檔案的使用者不用在意這些。
3.2.4、有時候內聯函式並不受到青睞,比如在嵌入式系統中,嵌入式系統的儲存約束可能不允許體積很大的可執行程式。
4、何時使用內聯函式
當程式設計需要時,每個函式都可以宣告為inline。下面列舉一些有用的建議:
1、當對程式執行效能有要求時,那麼就使用內聯函式吧。
2、當你想巨集定義乙個函式時,那就果斷使用內聯函式吧。
3、在類內部定義的函式會預設宣告為inline函式,這有利於 類實現細節的隱藏。
5、關鍵點
1、內聯宣告只是一種對編譯器的建議,編譯器是否採用內聯措施由編譯器自己來決定。甚至在彙編階段或鏈結階段,一些沒有inline宣告的函式編譯器也會將它內聯展開。
2、編譯器的內聯看起來就像是**的複製與貼上,這與預處理巨集是很不同的:巨集是強制的內聯展開,可能將會汙染所有的命名空間與**,將為程式的除錯帶來困難。
3、所有的類中定義的函式都預設宣告為inline函式,所有我們不用顯示地去宣告inline。
4、虛函式不允許內聯。
5、雖然說模板函式放中標頭檔案中,但它們不一定是內聯的。(不是說定義在標頭檔案中的函式都是內聯函式)。
C 內聯函式
1 什麼是內聯函式?內聯函式就是小型函式,犧牲空間來節省函式呼叫的開銷,一般用作比較小的函式,即函式內部沒有迴圈 開關語句等。內聯函式被發明出來就是為了取代c中的巨集,因為巨集是單純的替換而沒有型別檢查所以經常出毛病,2 為什麼要引入內聯函式?當然,引入內聯函式的主要目的是 解決程式中函式呼叫的效率...
C 內聯函式
1 什麼是內聯函式?2 為什麼要引入內聯函式?3 為什麼inline能取代巨集?4 內聯函式和巨集的區別?5 什麼時候用內聯函式?6 如何使用內聯函式?7 內聯函式的優缺點?8 如何禁止函式進行內聯?9 注意事項 1 什麼是內聯函式?內聯函式是指那些定義在類體內的成員函式,即該函式的函式體放在類體內...
c 內聯函式
1 什麼是內聯函式?內聯函式是指那些定義在類體內的成員函式,即該函式的函式體放在類體內。2 為什麼要引入內聯函式?當然,引入內聯函式的主要目的是 解決程式中函式呼叫的效率問題。另外,前面我們講到了巨集,裡面有這麼乙個例子 define abs x x 0?x x 當 i出現時,巨集就會歪曲我們的意思...