C++編程規範 目錄

組織和策略問題

第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 保護符,決不要編寫外部 #include 保護符

函數與操作符

第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條 不要無意地編寫不通用的代碼


錯誤處理與異常

第68條 廣泛地使用斷言記錄內部假設和不變式
第69條 建立合理的錯誤處理策略,並嚴格遵守
第70條 區別錯誤與非錯誤
第71條 設計和編寫錯誤安全代碼
第72條 優先使用異常報告錯誤
第73條 通過值拋出,通過引用捕獲
第74條 正確地報告、處理和轉換錯誤
第75條 避免使用異常規範


STL: 容器

第76條 默認時使用 vector。否則,選擇其他合適的容器
第77條 用 vector 和 string 代替數組
第78條 使用 vector(和 string::c_str)與非 C++ API 交換數據
第79條 在容器中只存儲值和智能指針
第80條 用 push_back 代替其他擴展序列的方式
第81條 多用範圍操作,少用單元素操作
第82條 使用公認的慣用法真正地壓縮容量,真正地刪除元素


STL: 算法

第83條 使用帶檢查的 STL 實現
第84條 用算法調用代替手工編寫的循環
第85條 使用正確的 STL 查找算法
第86條 使用正確的 STL 排序算法
第87條 使謂詞成爲純函數
第88條 算法和比較器的參數應多用函數對象少用函數
第89條 正確編寫函數對象


類型安全


第90條 避免使用類型分支,多使用多態
第91條 依賴類型,而非其表示方式
第92條 避免使用 reinterpret_cast
第93條 避免對指針使用 static_cast
第94條 避免強制轉換 const
第95條 不要使用 C 風格的強制轉換
第96條 不要對非 POD 進行 memcpy 操作或者 memcmp 操作
第97條 不要使用聯合重新解釋表示方式
第98條 不要使用可變長參數(...)
第99條 不要使用失效對象。不要使用不安全函數
第100條 不要多態地處理數組


文中的建議,有部分包含一般的做法或個人習慣和喜好,可根據具體情況進行調整。


返回《C++ 編程規範及慣用法》

發佈了53 篇原創文章 · 獲贊 22 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章