《高質量C++程式設計指南》讀書筆記(一) (轉)

gugu99發表於2008-08-07
《高質量C++程式設計指南》讀書筆記(一) (轉)[@more@]

《高質量C++指南》是一本關於C++程式設計風格的指導、建議性的書,誕生已經有一年多了,初學C++,閱讀此書,感覺甚好,收穫很大。這本書對初學者掌握好的編碼習慣有極大的幫助,對老手改進編碼方式也有好處。

 :namespace prefix = o ns = "urn:schemas--com::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”原則。

命名規則儘量與所採用的操作或開發工具的風格保持一致。

程式中不要出現僅靠大小寫區分的相似的識別符號。

程式中不要出現識別符號完全相同的區域性變數和全域性變數,會使人誤解。

變數的名字應當使用“名詞”或者“形容詞+名詞”。

全域性函式的名字應當使用“動詞”或者“動詞+名詞”(動賓片語)。

類的成員函式應當只使用“動詞”,被省略掉的名詞就是本身。

用正確的反義片語命名具有互斥意義的變數或相反動作的函式等。

儘量避免名字中出現數字編號,除非邏輯上的確需要編號。

 

簡單的應用程式命名規則:

類名和函式名用大寫字母開頭的單片語合而成。

變數和引數用小寫字母開頭的單片語合而成。

常量全用大寫的字母,用下劃線分割單詞。

靜態變數加字首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 行程式碼之內。

儘量避免函式帶有“記憶”功能。相同的輸入應當產生相同的輸出。

用於出錯處理的返回值一定要清楚,讓使用者不容易忽視或誤解錯誤情況。

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1008677/,如需轉載,請註明出處,否則將追究法律責任。

相關文章