C++ 中的 inline function
相信大家對於函式都不陌生,但是對於 inline 函式,也叫做內嵌函式,或許大家不是那麼的清楚熟悉,這篇就來看看 C++ 中的 inline 是什麼!
inline 函式
inline 函式的語法也很簡單,就只要在函式前面加上 inline
關鍵字就好了 :
#include<stdio.h>
#include<iostream>
using namespace std;
inline square(int x) {
return x*x;
}
int main() {
cout << sqaure(10) << endl; // 輸出 100
}
那麼 inline
的目的到底是甚麼呢 ? 其實 inline
的目的在於加速 c++ 的執行速度,在輸出上確實不會有太大的差異。那麼來看看,inline 函式是怎麼做的 ?
inline 機制
一般而言,當我們撰寫函數,並呼叫使用,計算機的機器語言指令會紀錄目前工作階段的記憶體位址,然後跳至函數的記憶體位置處理完程序後,並回到原先的位址上,而這樣來回會造成時間上的額外負擔。
C++於是提供 inline 函數,當我們加入關鍵字inline
時,在編譯時便會把函數中的代碼中
直接展開。
編譯器不一定會執行 inline
那我們可能會想說,那我乾脆所有函式都前面加個 inline
,這樣全部都能提升效率。顯然這是不可能的。為甚麼呢 ?
因為編譯器不一定會執行你所寫的 inline 函式。對於太過複雜的函式,編譯器是會拒絕 inline 的執行的,這麼一來,反而比正常呼叫函式的過程又多了額外的開銷,適得其反。
明智的使用 inline
可惜的是,並沒有一個明確的標準告訴我們究竟怎樣的函式才可以寫成 inline,且編譯器也會響應。所以我們要謹記使用 inline 的準則 :
- 使用頻率高
- 簡單
- 短小
諸如,for, switch 等較複雜的邏輯結構都是有可能會被編譯器拒絕的。