修 C 程式設計規範(101條規則 準則與最佳實踐)

2021-09-24 05:16:32 字數 3120 閱讀 6252

**:

c++程式設計規範(101條

規則、準則與最佳實踐)

c++程式設計規範(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保護符,決不要編寫外部#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條:要避免在不同的模組中分配和釋放記憶體

第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操作或者mencmp操作

第97條:不要使用聯合重新解釋表示式

第98條:不要使用可變長引數(…)

第99條:不要使用失效物件(注意迭代器失效,特別是在插入元素後)。不要使用不安全函式

第100條:不要多型地處理陣列

C 程式設計規範101條

第1條 在高警告級別乾淨利落地進行編譯 第2條 使用自動構建系統 第3條 使用版本控制系統 第4條 做 審查 設計風格 程式設計風格 容器1 類 函式 列舉的名稱形如likethis,每個單詞首字母都大寫。2 變數的名字如likethis,第二個單詞首字母大寫 3 類中私有成員變數名形如liketh...

c 編碼規範101條

c 編碼規範101條 組織和策略問題 第0條 不要拘泥於小節 又名 了解哪些東西不應該標準化 第1條 在高警告級別乾淨利落地進行編譯 第2條 使用自動構建系統 第3條 使用版本控制系統 第4條 在 審查上投入 設計風格 第5條 乙個實體應該只有乙個緊湊的職責 第6條 正確 簡單和清晰第一 第7條 程...

C 再學習系列 虛函式的4條規則

對於常規的基類函式來說 1 盡量使用非虛擬介面模式 nvi 讓介面函式成為非虛擬的.2 盡量讓虛函式成為私用的.3 只有當派生類需要呼叫基類對某個虛函式的實現時,才把虛函式宣告為保護的.4 基類的析構函式應該要麼為共有虛函式 要麼為保護虛函式.說明 1,2 兩條將虛共有介面的兩個職責進行了很好的分解...