谷歌C++編碼規範筆記
##前言## 今天快速翻看了谷歌C++編碼規範http://zh-google-styleguide.readthedocs.org/en/latest/google-cpp-styleguide/contents/,學到了一些東西。ide
對於這個規範,我不會100%接收,好比裏面的變量命名規範就跟工做項目的代碼衝突了,還有谷歌建議switch中的每一個塊要加上{}等等。 我在看文檔的過程當中,把學到的新東西記錄下來,有些之前就習覺得常的編碼習慣,我就再也不記錄,好比析構函數要用virtual關鍵字,用sizeof(varname)代替sizeof(type)等。這裏的摘抄,都是我認爲具備通用性的建議。函數
##正文##ui
- 全部頭文件都應該使用 #define 防止頭文件被多重包含, 命名格式當是: PROJECT_PATH_FILE_H_
- 能用前置聲明的地方儘可能不使用 #include.
- 複雜的內聯函數的定義, 應放在後綴名爲 -inl.h 的頭文件中.
- 使用標準的頭文件包含順序可加強可讀性, 避免隱藏依賴: C 庫, C++ 庫, 其餘庫的 .h, 本項目內的 .h.
- 不要在 .h 文件中使用匿名名字空間.
- 不要將嵌套類定義成公有, 除非它們是接口的一部分, 好比, 嵌套類含有某些方法的一組選項.
- 禁止使用 class 類型的靜態或全局變量: 它們會致使很難發現的 bug 和不肯定的構造和析構函數調用順序.
- 構造函數中只進行那些沒什麼意義的初始化, 可能的話, 使用 Init() 方法集中初始化有意義的 (non-trivial) 數據.
- 類的每一個區段內的聲明一般按如下順序:
- typedefs 和枚舉
- 常量
- 構造函數
- 析構函數
- 成員函數, 含靜態成員函數
- 數據成員, 含靜態數據成員
- 咱們不容許使用缺省函數參數.
- 咱們禁止使用 RTTI.
- 對於迭代器和其餘模板對象使用前綴形式 (++i) 的自增, 自減運算符.
- 整數用 0, 實數用 0.0, 指針用 NULL, 字符 (串) 用 '\0'.
- 關於函數的命名,永遠不要用省略字母的縮寫,好比不能將count縮寫成cnt。
- 函數聲明處註釋描述函數功能; 定義處描述函數實現.
- 向函數傳入 NULL, 布爾值或整數時, 要註釋說明含義, 或使用常量讓代碼望文知意.
- 若是函數聲明成 const, 關鍵字 const 應與最後一個參數位於同一行.
- 若是有些參數沒有用到, 在函數定義處將參數名註釋起來:
- return 表達式中不要用圓括號包圍.
- 預處理指令不要縮進, 從行首開始.
- 輸入參數是值參或 const 引用, 輸出參數爲指針.好比
void Foo(const string &in, string *out);