《高品質C++編程指南》筆記

來源:互聯網
上載者:User
《高品質C++編程指南》是一本關於C++編程風格的指導、建議性的書,誕生已經有一年多了,初學C++,閱讀此書,感覺甚好,收穫很大。這本書對初學者掌握好的編碼習慣有極大的協助,對老手改進編碼方式也有好處。 XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />這裡把讀書筆記拿出來共用,希望對大家有協助。本書共11章,另前言以及參考文獻,附錄A,B,C建議按照原作者的意見,按照先前言,再附錄,再本文的順序閱讀。  標頭檔:為了防止標頭檔被重複引用,應當用 ifndef/define/endif 結構產生預先處理塊。用#include < filename.h> 格式來引用標準庫的標頭檔(編譯器從標準庫目錄開始搜尋)。用#include “filename.h” 格式來引用非標準庫的標頭檔(編譯器從使用者的工作目錄開始搜尋)。標頭檔中只存放“聲明”而不存放“定義” 。 程式碼:在每個類聲明之後、每個函數定義結束之後都要加空行。在一個函數體內,邏揖上密切相關的語句之間不加空行,其它地方應加空行分隔。一行代碼只做一件事情,如只定義一個變數,或唯寫一條語句。這樣的代碼容易閱讀,並且方便於寫注釋。 ifforwhiledo 等語句自佔一行,執行語句不得緊跟其後。不論執行語句有多少都要加 {}。儘可能在定義變數的同時初始化該變數(就近原則)。 空格:關鍵字之後要留空格。函數名之後不要留空格,緊跟左括弧‘(’,以與關鍵字區別。 ‘(’向後緊跟,‘)’、‘,’、‘ ;’向前緊跟,緊跟處不留空格。‘,’之後要留空格,如 Function(x, y, z)。如果‘ ;’不是一行的結束符號,其後要留空格,如for (initialization; condition; update)。二元操作符的前後應當加空格。一元操作符前後不加空格。象“[]”、“.”、“->”這類操作符前後不加空格。 對齊:程式的分界符‘ {’和‘ }’應獨佔一行並且位於同一列,同時與引用它們的語句靠左對齊。 { }之內的代碼塊在‘ {’右邊數格處靠左對齊。 長行拆分:程式碼最大長度宜控制在 70 80 個字元以內。長運算式要在低優先順序操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進行適當的縮排,使排版整齊,語句可讀。 修飾符的位置:應當將修飾符 * 和& 緊靠變數名。 注釋:注釋是對代碼的“提示”,不是文檔。不可喧賓奪主,太多了會讓人眼花繚亂。花樣要少。邊寫代碼邊注釋,修改代碼同時修改相應的注釋,以保證注釋與代碼的一致性。不再有用的注釋要刪除。注釋應當準確、易懂,防止注釋有二義性。盡量避免在注釋中使用縮寫,特別是不常用縮寫。注釋的位置應與被描述的代碼相鄰,可以放在代碼的上方或右方,不可放在下方。當代碼比較長,特別是有多重嵌套時,應當在一些段落的結束處加註釋,便於閱讀。 命名規則:標識符應當直觀且可以拼讀,可望文知意,不必進行“解碼”。最好採用英文單詞或其組合,切忌使用漢語拼音來命名。識符的長度應當符合“min-length && max-information”原則。命名規則盡量與所採用的作業系統或開發工具的風格保持一致。程式中不要出現僅靠大小寫區分的相似的標識符。程式中不要出現標識符完全相同的局部變數和全域變數,會使人誤解。變數的名字應當使用“名詞”或者“形容詞+名詞”。全域函數的名字應當使用“動詞”或者“動詞+名詞”(動賓片語)。類的成員函數應當只使用“動詞”,被省略掉的名詞就是對象本身。用正確的反義片語命名具有互斥意義的變數或相反動作的函數等。盡量避免名字中出現數字編號,除非邏輯上的確需要編號。 簡單的 Windows應用程式命名規則:類名和函數名用大寫字母開頭的單片語合而成。變數和參數用小寫字母開頭的單片語合而成。常量全用大寫的字母,用底線分割單詞。靜態變數加首碼 s_(表示 static)。如果不得已需要全域變數,則使全域變數加首碼 g_(表示 global)類的資料成員加首碼 m_(表示 member),這樣可以避免資料成員與成員函數的參數同名。為了防止某一軟體庫中的一些標識符和其它軟體庫中的衝突,可以為各種標識符加上能反映軟體性質的首碼。 運算式和基本語句:如果程式碼中的運算子比較多,用括弧確定運算式的操作順序,避免使用預設的優先順序。不要編寫太複雜的複合運算式。不要有多用途的複合運算式。不要把程式中的複合運算式與“真正的數學運算式”混淆。不可將布爾變數直接與 TRUEFALSE 或者 10 進行比較。應當將整型變數用“==”或“!=”直接與0 比較。不可將浮點變數用“==”或“!=”與任何數字比較。應當將指標變數用“==”或“!=”與NULL 比較。不可在 for 迴圈體內修改迴圈變數,防止 for 迴圈失去控制。每個case 語句的結尾不要忘了加break,否則將導致多個分支重疊(除非有意使多個分支重疊)。不要忘記最後那個default 分支。即使程式真的不需要default 處理,也應該保留。 常量:在C++ 程式中只使用const 常量而不使用宏常量(#define)。 需要對外公開的常量放在標頭檔中,不需要對外公開的常量放在定義檔案的頭部。如果某一常量與其它常量密切相關,應在定義中包含這種關係,而不應給出一些孤立的值。 函數設計:參數的書寫要完整,如果函數沒有參數,則用void 填充。如果參數是指標,且僅作輸入用,則應在類型前加 const,以防止該指標在函數體內被意外修改。如果輸入參數以值傳遞的方式傳遞對象,則宜改用“ const &”方式來傳遞,這樣可以省去臨時對象的構造和析構過程,從而提高效率。避免函數有太多的參數,參數個數盡量控制在 5 個以內。不要省略傳回值的類型。函數名字與傳回值類型在語義上不可衝突。不要將正常值和錯誤標誌混在一起返回。正常值用輸出參數獲得,而錯誤標誌用 return 語句返回。有時候函數原本不需要傳回值,但為了增加靈活性如支援鏈式表達,可以附加傳回值。在函數體的“入口處”,對參數的有效性進行檢查。在函數體的“出口處”,對 return 語句的正確性和效率進行檢查。( 1return 語句不可返回指向“棧記憶體”的“指標”或者“引用”,因為該記憶體在函數體結束時被自動銷毀。( 2)要搞清楚返回的究竟是“值”、“指標”還是“引用”( 3)如果函數傳回值是一個對象,要考慮 return 語句的效率。函數的功能要單一,不要設計多用途的函數。函數體的規模要小,盡量控制在 50 行代碼之內。盡量避免函數帶有“記憶”功能。相同的輸入應當產生相同的輸出。用於出錯處理的傳回值一定要清楚,讓使用者不容易忽視或誤解錯誤情況。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.