C++ inline
關鍵字學習筆記
一、什么是 inline
函數?
inline
(內聯)是 C++ 中的一個關鍵字,表示“將函數的代碼直接插入到調用點”,以減少函數調用開銷,提升執行效率。
? 注意:
inline
是一種“請求”,編譯器不一定會采納它。
二、為什么使用 inline
?
通常,函數調用會有如下流程:
- 參數壓棧
- 跳轉到函數地址
- 執行函數體
- 返回并恢復現場
這個過程有一定的性能開銷。對于體積小、調用頻繁的函數,可以使用 inline
來減少這些開銷。
三、如何使用 inline
?
? 語法格式:
inline 返回類型 函數名(參數) {// 函數體
}
四、代碼示例
🔹 示例一:普通函數
int add(int a, int b) {return a + b;
}int main() {int result = add(1, 2); // 正常函數調用,有開銷
}
🔹 示例二:inline
函數
inline int add(int a, int b) {return a + b;
}int main() {int result = add(1, 2); // 編譯器可能會將調用展開為 int result = 1 + 2;
}
- 優勢:省去了函數調用的跳轉和返回,提升性能。
- 缺點:如果函數體太大、頻繁展開,會增加可執行文件體積(代碼膨脹)。
五、適合使用 inline
的場景
適合用 inline 的情況 | 不適合用 inline 的情況 |
---|---|
函數體非常小 | 函數體很大 |
調用頻繁 | 很少調用 |
希望去除調用開銷 | 對性能影響不大 |
函數定義通常寫在頭文件中 | 函數定義隱藏在源文件中 |
六、常見應用
🔸 頭文件中定義的函數默認建議加 inline
// math_utils.hpp
#pragma onceinline int square(int x) {return x * x;
}
如果你不加 inline
,多處包含這個頭文件時,會造成鏈接錯誤(重復定義)。
七、與宏的對比
#define ADD(a, b) ((a) + (b)) // 宏inline int add(int a, int b) { // inline 函數return a + b;
}
- 宏沒有類型檢查、可能有副作用
inline
函數安全、可調試、有作用域
? 結論:inline 更推薦使用!
八、總結
項目 | 說明 |
---|---|
作用 | 減少函數調用開銷,將函數體插入到調用點 |
使用場景 | 函數體小、調用頻繁、在頭文件中定義 |
注意事項 | 編譯器不一定接受;不要濫用大型函數內聯 |
替代宏 | inline 比宏更安全,推薦使用 |