【C++】內聯函數概念&使用時機&優缺點

1、typedef關鍵字

爲什麼要有typedef這種關鍵字?主要是解決什麼問題?
1)typedef是一種簡化複雜名稱類型的手段
2)定義一種類型的別名
3)用來定義與平臺無關的類型?
typedef long double myreal;
(myreal就是long double的別名)
4)在C語言中,聲明struct新對象時,必須要帶上struct

2、內聯函數

爲什麼要提出內聯函數?主要解決什麼問題?
1)inline是C++中的關鍵字,可以用來定義內聯函數
2)內聯函數是C++中的一種特殊的函數
內聯函數的特殊體現在:編譯器在調用內聯函數的時候,不是跟普通函數一樣,而是在編譯的時候,直接將函數體替換到函數調用的位置。
僞代碼:

inline void foo(){
	int a;
	int b;
	int c = a + b;
	cout<<c<<endl;
}
int main(){
	//調用函數
	foo();
}
//實際在編譯的時候,編譯器會處理爲:
int main(){
	//用函數體去替換函數調用的代碼
	inline void foo(){
	int a;
	int b;
	int c = a + b;
	cout<<c<<endl;
	}
}

1)爲什麼要引入內聯函數

  • 提高運行效率,減少函數帶來的開銷:普通函數被調用的時候,編譯器會把函數信息放在堆棧中,然後存儲函數變量,返回地址等信息,當函數調用完畢後,還需要釋放堆棧空間。所以普通函數如果被調用的地方很多,會導致大量的內存開銷。因此,引入內聯函數,減少這種開銷。

2)內聯函數使用時機

  • 一般來說,inline用於定義類的成員變量
  • 內聯函數適用於函數方法體小,多地方調用的函數

3)內聯函數的優點

  • 沒有調用開銷,效率高
  • 編譯器在調用一個內聯函數的時候,首先會檢查它的類型,然後保證調用正確,然後進行一系列相關檢查,就像對待任何一個真正的函數一樣,這也消除了隱患和侷限。但是要注意,宏展開的時候是不會進行校驗和檢查的,安全隱患較大。
  • 可以作爲一個類成員函數,和其他普通類成員函數作用一樣。

4)內聯函數的缺點

  • 內聯函數體一般不宜過大,如果過大的話,編譯器會放棄內聯的方式,適得其反(程序體過大的話,緩存收到影響)
  • 內存、緩存和CPU優化
  • 對於小巧的、高頻率使用的函數適合用inline函數,當代編譯會自動使用內聯函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章