Google C++ Style Guide
阿新 • • 發佈:2018-12-31
這裡包括了大多數,但是末尾的關於函式呼叫等具體寫法,不好用一句話來總結,請參考原文;
重點的有爭議的已經粗體標出,具體原因可以參考原文;
- 通常每一個cpp檔案都應該關聯一個頭檔案,除非單元測試;
- 所有標頭檔案都應該新增格式如<PROJECT>_<PATH>_<FILE>_H_的警衛巨集,避免重入多次包含;
- 如果前向宣告夠用就不要包含標頭檔案;
- 只有10行以內的小函式才能夠被inline;
- inline複雜函式檔名稱請新增-inl.h的字尾;
- 函式引數請參照先input,後output的順序;
- 標頭檔案包含請參照順序:C library, C++ library, other libraries' .h, your project's .h;
- 名稱空間如果要用,使用路徑名,不要使用using語句;
- 巢狀類請使用一個額外的名稱空間使得其與全域性名稱空間區分開;
- 非成員函式/靜態成員函式>>全域性函式;
- 儘可能縮短區域性變臉生存範圍,且一定要初始化;
- 禁止使用靜態或全域性的類物件,因為其構造析構執行順序引起的問題非常難以排除;
- 類建構函式僅僅設定成員變數初始值,複雜初始化應該交給顯示Init函式;
- 定義一個預設建構函式,否則編譯器會為你定義一個,通常都非常糟糕;
- 僅有一個函式的建構函式請加上explicit;
- 儘可能新增一個複製建構函式和賦值建構函式;
- 僅僅提供訪問成員變數的類使用struct,其他使用class;
- 組合通常比繼承更適合,繼承請不要忘記新增public;
- 除一個基類外其他基類都是虛介面類的可以使用多重繼承,其他情況儘量避免;
- 類滿足特定條件是允許的但不是必須的,就可以作為介面類;
- 絕大多數情況下請不要過載運算子;
- 成員變數應該私有;
- 類中宣告時,public在前private在後,函式在前,資料在後;
- 儘量減小函式行數,超過40請思考是否能抽象減少;
- scoped_ptr可用,不要使用auto_ptr,std::tr1::shared_ptr共享所有權;
- 使用cpplint.py來檢測風格錯誤;
- 入口引數使用const引用,出口引數使用指標;
- 不要使用預設函式引數,避免複製產生難以察覺的錯誤;
- 避免使用棧上變長陣列和棧上分配變長記憶體alloca,使用scoped_ptr和scoped_array;
- 儘量少用friend,即使使用,也要限制在一個檔案中;
- 不使用c++異常機制:帶來的問題得不償失;
- 不使用RTTI執行時類別識別機制,非要使用那說明你設計的不當;
- 使用static_cast<>而不是強制型別轉換(type)
- 不要使用streams除非是log日誌類,使用printf-like函式;
- 使用++i而是i++;
- 儘可能使用const;
- 使用0做整數,0.0做浮點數,NULL做指標,'\0'做字元
- 使用sizeof(變數名)而不是sizeof(型別名)
- 使用被認證的boost類庫:Call_Traits,Compressed_Pair,Pointer Container,Arra,BGL,PropertyMap等;
- 型別變數使用名詞,函式使用動詞,都應該使用描述性單詞;
- 檔名稱使用小寫,可用_或-隔開;
- 型別名稱每個單詞的首字母都應該大寫;
- 變數名稱都小寫,用_隔開,類的資料成員中最後新增_;
- 常量名稱用小寫k開頭,其他每個單詞都大寫;
- 函式名稱的每個單詞首寫字母都大寫,設定獲取成員的函式使用小寫,用_隔開;
- 列舉變數名稱使用每個單詞首字母大寫的格式,其中每個常量可採用全部大寫或者k開頭的每個單詞首字母大寫的形式;
- 檔案註釋:版權註釋,license,作者,功能說明,(修改歷史)
- 類註釋:功能說明,簡單示例
- 函式註釋:功能說明,引數說明,是否可重入,執行緒同步,效能提示...,
- 使用TODO註釋表明未來將要做的工作
- 每行程式碼不要超過80個字元
- 不要使用費asscii字元,都必須使用utf-8編碼;
- 使用空格而不是tab,每2空格一個indent;
- 返回型別與函式名同行;