非科班學C++整理小知識點,參考牛客評論區、博客園、CSDN
inline內聯函數是C++中的一種特殊函數,它可以像普通函數一樣被調用,但是並不通過函數調用的機制而是通過將函數體直接插入調用處來實現的,這樣可以大大減少由函數調用帶來的開銷,從而提高程序的運行效率。
inline適用的函數有兩種:
(1)在類內定義的成員函數;
(2)在類內聲明,類外定義的成員函數。
內聯函數與宏替換的差異:
(1)宏是由預處理器對宏進行替代,而內聯函數是通過編譯器來實現的。
(2)內聯函數是真正的函數,在用的時候像宏一樣展開,取消了函數的參數壓棧,減少了調用的開銷。
宏定義在使用時只是簡單的文本替換,並沒有做嚴格的參數檢查,返回值也不能被強制轉換爲合適的類型,因此宏存在一系列的隱患和侷限性。
注意事項:
(1)內聯函數是以空間換時間的做法,省去調用函數的額外開銷。所以代碼很長或者有循環/遞歸的函數不適宜使用內聯。
(2)inline對編譯器來說只是一個建議,編譯器可以忽略這個建議。
(3)內聯函數的函數體內不能含有複雜的結構控制語句,如switch和while,否則編譯器將該函數視同普通函數那樣產生函數調用代碼。
(4)遞歸函數不能被用來作爲內聯函數。
(5)內聯函數一般適合於只有1-5行語句的小函數,對於一個含有很多語句的大函數,沒必要使用內聯函數來實現。
(6)內聯函數的定義必須出現在內聯函數第一次被調用之前。
(7)對內聯函數不能進行異常接口聲明,就是不能聲明可能拋出的異常。