1. 程式人生 > 其它 >學習筆記 --《C++程式設計規範101條規則、準則與最佳實踐》

學習筆記 --《C++程式設計規範101條規則、準則與最佳實踐》

《C++程式設計規範101條規則、準則與最佳實踐》中的部分準則

程式設計規範101條

組織和策略問題

  • 第0條:不要拘泥於小節(又名:瞭解哪些不應該標準化)
  • 第1條:在高警告級別乾淨利落地進行編譯
  • 第2條:使用自動構建系統
  • 第3條:使用版本控制系統
  • 第4條:做程式碼審查

設計風格

  • 第5條:一個實體應該只有一個緊湊的職責
  • 第6條:正確、簡單和清晰第一
  • 第7條:程式設計中應知道何時和如何考慮可伸縮性
  • 第8條:不要進行不成熟的優化
  • 第9條:不要進行不成熟的劣化
  • 第10條:儘量減少全域性和共享資料
  • 第11條:隱藏資訊
  • 第12條:懂得何時和如何進行併發性程式設計
  • 第13條:確保資源為物件所擁有。使用顯式的RAII和智慧指標

程式設計風格

  • 第14條:寧要編譯時和連線時錯誤,也不要執行時錯誤
  • 第15條:積極使用const
  • 第16條:避免使用巨集
  • 第17條:避免使用“魔數”
  • 第18條:儘可能區域性的宣告變數
  • 第19條:總是初始化變數
  • 第20條:避免函式過長,避免巢狀過深
  • 第21條:避免跨編譯單元的初始化依賴
  • 第22條:儘量減少定義性依賴。避免迴圈依賴
  • 第23條:標頭檔案應該自給自足
  • 第24條:總是編寫內部#include保護符,決不要編寫外部#inlcude保護符

函式與操作符

  • 第25條:正確的選擇通過值、(智慧)指標或者引用傳遞引數
  • 第26條:保持過載操作符的自然語義
  • 第27條:優先使用算數操作符和賦值操作符的標準形式
  • 第28條:優先使用++和--的標準形式。優先呼叫字首形式
  • 第29條:考慮過載以避免隱含型別轉換
  • 第30條:避免過載&&、||或,(逗號)
  • 第31條:不要編寫依賴於函式引數求值順序的程式碼

類的設計與繼承

  • 第32條:弄清要編寫的是哪種類
  • 第33條:用小類替代大類
  • 第34條:用組合替代繼承
  • 第35條:避免從並非要設計成基類的類中繼承
  • 第36條:優先提供抽象介面
  • 第37條:公用繼承即可替代性。繼承,不是為了重用,而是為了被重用
  • 第38條:實施安全的覆蓋
  • 第39條:考慮將虛擬函式宣告為非公用的,將公用函式宣告為非虛擬的
  • 第40條:要避擴音供隱式轉換
  • 第41條:將資料成員設為私有的,無行為的聚集(c語言形式的struct)除外
  • 第42條:不要公開內部資料
  • 第43條:明智地使用Pimpl
  • 第44條:優先編寫非成員非友元函式
  • 第45條:總是一起提供new和delete
  • 第46條:如果提供類專門的new,應該提供所有的標準形式(普通、就地和不丟擲)

構造、析構與複製

  • 第47條:以同樣順序定義和初始化成員變數
  • 第48條:建構函式中用初始化替代賦值
  • 第49條:避免在建構函式和解構函式中呼叫虛擬函式
  • 第50條:將基類解構函式設為公用且虛擬的,或者保護且非虛擬的
  • 第51條:解構函式、釋放和交換絕對不能失敗
  • 第52條:一致地進行復制和銷燬
  • 第53條:顯式地啟用或者禁止複製
  • 第54條:避免切片。在基類中考慮克隆代替複製
  • 第55條:使用賦值的標準形式
  • 第56條:只要可行,就提供不會失敗的swap(而且要正確地提供)

名字空間與模組

  • 第57條:將型別及其非成員函式介面置於同一名字空間
  • 第58條:應該將型別和函式分別置於不同的名字空間中,除非有意想讓它們一起工作
  • 第59條:不要在標頭檔案中或者#include之前編寫名字空間using
  • 第60條:要避免在不同的模組中分配和釋放記憶體
  • 第61條:不要在標頭檔案中定義具有連結的實體
  • 第62條:不要允許異常跨越模組邊界傳播
  • 第63條:在模組的介面中使用具有良好可移植性的型別

模板與範型

  • 第64條:理智地結合靜態多型性和動態多型性
  • 第65條:有意地進行顯式自定義
  • 第66條:不要特化函式模板
  • 第67條:不要無意地編寫不通用的程式碼