inline內聯函數
簡單來說,編譯器將inline函數體代碼直接複製到inline函數調用點處而非普通函數的函數調用,有點像宏但是比宏更安全會,會做安全檢查或自動類型轉換。
特點:
省去了參數壓棧、棧幀開闢與回收,結果返回等,加快運行速度;
大多類的成員函數(沒有循環遞歸、定義在內類或顯示內聯等)會自動轉化爲內聯函數;
但是也會造成代碼膨脹、版本迭代不便、程序員不可控缺點。
virtual虛函數
- 普通虛函數
一般講到虛函數大家都會告訴你創建了一張虛表Vtable,實現了多態的機制。
那什麼是多態機制呢?就是父類指針可以直接指向子類實例,通過父類的指針調用實際子類的成員函數,實現父類的多種形態。
那爲什麼父類指針可以直接指向子類實例呢?這就是虛表的功勞了,子類對應的虛表中首先寫入父類函數地址,如果有同名同參函數則替代相應函數地址,也就是說子類虛表中包含任何父類可調用函數的地址(或替換地址)。
特點:
構造函數不是虛函數,析構函數是虛函數; - 純虛函數
C++中包含純虛函數的類,被稱爲是“抽象類”。抽象類不能使用new出對象,只有實現了這個純虛函數的子類才能new出對象。純虛函數“只提供申明,沒有實現”,純虛函數必須在子類(sub class)中實現該函數纔可以使用。
特點:
不能被實例化
static靜態函數、變量
- 靜態變量
全局靜態變量:與普通全局變量不同,普通全局變量對全局所有文件可見,容易出現重名混淆等問題,static則不必擔心命名衝突。
局部靜態變量:生存期爲整個源程序,但是其作用域仍與自動變量相同,只能在定義該變量的函數內使用該變量。
靜態變量默認初始化爲0。 - 靜態成員函數
特點:
類的靜態成員函數是屬於整個類而非類的對象;
不能將靜態成員函數定義爲虛函數;
初始化在類體外進行,而前面不加static,以免與一般靜態變量或對象相混淆。