學習筆記 --《C++程式設計規範101條規則、準則與最佳實踐》
阿新 • • 發佈:2021-12-02
《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條:不要無意地編寫不通用的程式碼