就軟體工程觀點,使用函數是很好的作法,但多了函數呼叫來回的額外負擔,特別是小的、經常呼叫的函數。將函數 qualifier 為 inline 可節省呼叫的額外負擔。
- 空間換取時間 -- 函數程式碼會複製多份,可能使得程式變大了。
- 如果 inline 函數的參數有常數,編譯時可以加以簡化,所以未必包含整個 inline 函數的程式碼。
- 只是建議編譯器 inline 處理,未必採納,編譯器保有最終決定權。
- 比較:static inline 強迫編譯器 inline 處理
- GCC -Winline 提供
inline函數失敗的原因 - 只需要定義於表頭檔
- inline 的函數改變時,使用它的程式都需要重新編譯。
- 告訴 GCC 嘗試 inline 所有夠簡單的函數:-finline-functions。
跟 #define (巨集) 比較
- 巨集不能將 C++ 非 public 變數傳出去
- 兩者結果有時不同。巨集像是字串取代,inline 像是函數
- 巨集在行數多時不易理解
- 題外話:#define function(x) do{...}while(0) /* 避掉 ; 問題 */
參考:
沒有留言:
張貼留言