inline函數和普通函數以及static與#define之間的“恩怨前仇”

在c++裏面引入了inline函數,首先它和#define的區別:

A:

1:#define是在預編譯的時候,進行的沒有類型檢查的單純替換,而inline是在編譯的時候進行的有類型檢查的代碼展開。

2:#define沒有調試的可能,如果你的代碼裏面有#define所替換的函數,那你只能祈禱不要出錯。而inline在debug版本下是有調試的代碼的,在release版本下沒有調試的信息。

B:

!inline和普通函數的區別

1:inline因爲在調用的地方直接代碼展開,所以它不存在棧幀的開闢,顧沒有額外的開銷。

    而普通函數卻需要棧的開闢。另外,普通函數會生成符號,存儲在符號表裏面,inline不會生成符號表。

!!inline和static的區別和聯繫

 1:和上面的普通函數的區別一樣。

2:聯繫上,static修飾的數據或函數,只是本文件可見,inline函數也是本文件可見。


一般來說 ,我們用inline修飾函數定義,不修飾函數聲明。












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章