關於C++內聯函數

版權聲明:本文爲博主原創文章,轉載請註明出處

內聯函數定義:

將函數定義爲內聯函數,一般就是將他在程序中每個調用點上“內聯地”展開。要使用內聯函數,必須滿足以下之一:
1. 在函數聲明前加上關鍵字inline
2. 在函數定義前加上關鍵字inline
對於類中:定義在類聲明之中的成員函數將自動地成爲內聯函數;如果願意,也可以在類外定義成員函數,並使其成爲內聯函數。爲此,只要在類實現部分中定義函數時使用inline限定符(同上)。​

爲什麼使用內聯函數:

通常情況下,執行到函數調用指令時,程序會立即存儲改指令的地址,並將函數參數複製到堆棧中,跳轉到函數起始地址,執行函數,當函數執行完成時,再根據堆棧內容恢復之前程序。然而,來回地跳轉並記錄跳轉位置,需要一定開銷,由此便引出內聯函數​。當程序執行到內聯函數時,用函數代碼替換函數調用,程序無需跳轉。通常內聯函數運行速度比常規函數塊,但卻需要佔用更多內存。

內聯函數適用情況:

  1. 一個函數被重複調用;
  2. 函數只有幾行,且不包含for,while,switch語句;
  3. 內聯函數不可遞歸。
    注意:應選擇性使用內聯函數。如果執行代碼時間遠大於函數調用時間,則應該少用內聯函數;相反,如果代碼執行時間非常短,則使用內聯函數就可以節省很大一部分時間。
    內聯函數可能在程序中定義不止一次,只要內聯函數的定義在某個源文件中只出現一次,而且在所有的源文件中,其定義必須是相同的。如果inline函數的定義和聲明是分開的,而在另外一個文件中需要調用這些inline函數得時候,內聯是無法在這些調用函數內展開的。這樣內聯函數在全局範圍內就失去了作用。解決的辦法就是把內聯函數得定義放在頭文件中,當其它文件要調用這些內聯函數的時候,只要包含這個頭文件就可以了。把內聯函數的定義放在頭文件中,可以確保在調用函數時所使用的定義是相同的,並保證在調用點該函數的定義對調用點可見。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章