天天看點

inline函數複習

在C++中,為了解決一些頻繁調用的小函數大量消耗棧空間或者是叫棧記憶體的問題,特别的引入了inline修飾符,表示為内聯涵數。

在程式編譯時,編譯器将程式中出現的内聯函數的調用表達式用内聯函數的函數體來進行替換。

inline函數在被調用的地方,實際上是把函數體的代碼部分重複了一遍,而不是象普通函數那樣将參數壓棧,然後call   ....,這樣做可以減少函數的調用時間,提高程式執行的效率,但是如果有很多地方調用,程式将會很大,因為函數體被重複了許多遍。

inline函數必須被放在頭檔案中。因為,隻有這樣,當改動了其實作時,所有調用它并展開它的調用點才能正确嵌入其函數體。

以下是Essential   C++中的原話:  

  為了能夠擴充Inline函數的内容,在每個調用點上,編譯器都得取得其定義。這意味着我們必須将inline函數的定義置于頭檔案,而不是把它放在各個不同的程式代碼檔案。   

  我的了解是:在多檔案程式中,由于inline函數可能會被編譯器插入到每個檔案裡面,是以如果把inline函數放在某個cpp檔案中,編譯器可能不能找到這個inline函數而出錯,但如果放在頭檔案中,由于編譯器總是先處理所有的頭檔案,是以能先找到inline函數的定義。

繼續閱讀