這涉及一個效率問題。記住,調用函數的開銷是很大的,所謂的空間開銷是指調用函數前,
先要將原來的函數保存在寄存器(占用寄存器空間)裡面,並在調用結束後恢復。調用函
數時,還要復制實參(占用內存空間)。如果被調用函數一旦調用頻繁,就會花費很多空
間。如果你有一段“短小而頻繁調用的函數”,內聯是個不錯的選擇。
“如果含有復雜的分支或循環結構,我使用inline會有什麼後果?”
事實上,所謂內聯,是編譯器將內聯函數在函數調用點上展開函數代碼。例如 inline
int small(int a,int b) { return a < b ? a : b ; } cout << small ( a, b ) << endl ;
等同於 cout << (a < b ? a : b) << endl; 編譯器會將函數調用語句轉換為函數代碼,
再進行編譯。inline只是你給編譯器提一個建議,希望它將函數內聯,至於它會不會執行就不一
定了。 基本上復雜的函數它是不會同意的,就算同意了,也只會使你的編譯變得更將浪費時間,
而執行速度得不到什麼提升。還有,一些編譯器是不會通過含有遞歸的內聯函數的。 記住
,短小而且反復調用的函數進行內聯就可以了。