1. 程式人生 > >Google C++ Style Guide

Google C++ Style Guide

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