函數呼叫雖能模組化程式碼,卻伴隨著保存現場、跳轉、恢復現場的時間與空間開銷。對於「體積小、呼叫頻繁」的函數,這項開銷不可忽視。C++ 引入 inline 關鍵字,讓編譯器在編譯期以函數本體直接取代呼叫點,消除跳轉成本,以目標碼膨脹換取執行速度。
一般函數呼叫:執行流跳轉至函數位址 → 執行 → 返回呼叫點下一指令。
內聯函數:編譯器將呼叫表達式展開為函數本體機器碼,無跳轉指令,但每個呼叫點都會複製一份函數碼。
因此,內聯適用於:
inline int add_int(int x, int y, int z) {
return x + y + z;
}
與一般函數同樣擁有型別檢查、作用域規則,差別僅在編譯期處理方式。
inline。inline 強制內聯,但編譯器保留拒絕權(如函數過大、含迴圈、遞迴、虛函數呼叫等)。inline 只是建議,非強制指令。編譯器會依最佳化等級(-O2/-O3)自動決定是否內聯,甚至對未標記的函數自動內聯。inline 函數需加 static 或置於匿名命名空間,避免多重定義連結錯誤(C++17 起 inline 變數/函數可多重定義)。constexpr(C++11)編譯期運算,次之才考慮 inline。掌握內聯函數的權衡之道,能在不犧牲可維護性前提下,為熱點路徑榨乾效能。