內聯函數和普通函數的區別:
1、在編譯過程中,內聯函數在函數的調用點,把函數代碼全部展開,所以沒有標準函數的棧幀的開闢和回退。
(如果 調用函數的開銷 > 函數執行的開銷,那麼就建議寫爲內聯函數 )
調用的開銷:函數的棧幀的開闢和回退
執行的開銷:函數體內代碼執行的開銷
2、內聯函數只在本文件可見,編譯階段就進行了替換,所以不產生符號,所以一般在頭文件中定義,這樣就可以在其它文件調用。普通函數產生符號,多個文件引用頭文件,會產生符號重定義的錯誤。
.編譯階段不編譯.h文件,只編譯.c 或.cpp 文件
注意:inline只在release版本起作用,debug版本inline函數也需要棧幀的開闢和回退