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函數,當代編譯會自動使用內聯函數