1. #define 保護函數
(1)命名形式:<PROJECT>_<PATH>_<FILE>_H_性能
例如spa
#ifndef FOO_BAR_BAZ_H_ #define FOO_BAR_BAZ_H_ #endif //FOO_BAR_BAZ_H_
(2)做用:防止頭文件被屢次包含。指針
2. 頭文件的依賴關係code
(1)包含一個頭文件,即引入頭文件依賴關係。這個頭文件改變時,代碼都須要從新編譯。遞歸
(2)使用前置聲明來減小自定義頭文件包含其餘頭文件的數量。資源
(3)使用前置聲明的狀況編譯器
a. 聲明數據成員 Foo* 或 Foo&;it
b. 聲明靜態數據成員 Foo;編譯
c. 聲明以 Foo 爲參數、返回值的函數(參數 Foo 或者 const Foo& 有一個隱式單參數構造函數,則要引入類定義);
3. 內聯函數
(1)利:可產生更高效的目標代碼。儘可能內聯類成員訪問、修改函數,其餘簡短,對性能要求關鍵的函數。
(2)弊:過量使用會使性能受損。可能使代碼量增長。
(3)總結
a. 少於10行;
b. 不含循環或開關指令;
c. 虛函數、遞歸函數一般不能被內聯;
4. 內聯頭文件
(1)在頭文件中定義內聯函數,編譯器才能將其代碼複製到調用處。
(2)頭文件通常不含實現代碼,除非爲了改善可讀性或性能。
(3)-inl.h 文件定義複雜的內聯函數,避免頭文件臃腫,使實現和定義分開。
(4)-inl.h 文件另外一用途是定義函數模板,使函數模板定義可讀性更好。
5. 函數參數次序
(1)參數次序:輸入、輸出。
(2)輸入,數值或常引用。
(3)輸出,非 const 指針。
6. 包含的命名和次序
(1)標準包含次序:C庫、C++庫、其餘庫、自定義頭文件。
(2)頭文件按其資源目錄降序排列。