Bjarne Stroustrup 語錄

youhello發表於2007-11-20

摘錄自Bjarne Stroustrup 的《The C++ Programming Language》(Special Edition)

[@more@]一、致讀者

1. 在程式設計序時,你是在為你針對某個問題的解決方案中的思想建立起一種具體表示。讓程式的結構儘可能地直接反映這些思想:
★.如果你能把“它”看成一個獨立的概念,就把它做成一個類。
★.如果你能把“它”看成一個獨立的實體,就把它做成某個類的一個物件。
★.如果兩個類有共同的介面,將此介面做成一個抽象類。
★.如果兩個類的實現有某些顯著的共同東西,將這些共性做成一個基類。
★.如果一個類是一種物件的容器,將它做成一個模板。
★.如果一個函式實現對某容器的一個演算法,將它做成為對一族容器可用的模板函式。
★.如果一組類、模板等相互之間有邏輯聯絡,將它們放進一個名字空間裡。

2. 在你定義一個並不是實現某個像矩陣或複數這樣的數學物件的類時,或者定義一個低層的型別如連結表的時候:
★.不要使用全域性資料(使用成員)。
★.不要使用全域性函式。
★.不要使用公用資料成員。
★.不要使用友元,除非為了避免a或c。
★.不要在一個類裡面放“型別域”(指那種為了說明一個類所儲存資料的情況而放置的標誌域) ;採用虛擬函式。
★.不要使用線上函式(inline function),除非作為效果顯著的最佳化。

二、C++ 概覽

1. 不用害怕,一切都會隨著時間的推移而逐漸明朗起來。
2. 你並不需要在知道了C++的所有細節之後才能寫出好的C++程式。
3. 請特別關注程式設計技術,而不是各種語言特徵。

三、標準庫概覽

1. 不要像重新發明車輪那樣企圖做每件事;去使用庫。
2. 不要相信奇蹟;要理解你的庫能做什麼,它們如何做,它們做時需要多大的代價。
3. 當你遇到一個選擇時,應該優先選擇標準庫而不是其他的庫。
4. 不要認為標準庫對於任何事情都是最理想的。
5. 切記#include 你所用到的功能的標頭檔案。
6. 記住,標準庫的功能定義在名字空間std之中。
7. 請用string,而不是char*。
8. 如果懷疑,就用一個檢查區間範圍的向量(例如Vec)。
9. vector 、list和 map 都比T[] 好。
10. 如果向一個容器中新增一個元素,用push_back() 或 back_inserter()。
11. 採用對vector的push_back(),而不是對陣列的realloc()。
12. 在main()中捕捉公共的異常。

四、型別和宣告

1. 保持較小的作用域。
2. 不要在一個作用域和它外圍的作用域裡採用同樣的名字。
3. 在一個宣告中只宣告一個名字。
4. 讓常用的和區域性的名字比較短,讓不常用的和全域性的名字比較長。
5. 避免看起來類似的名字。
6. 維持某種統一的命名風格。
7. 仔細選擇名字,反映其意義而不是反映實現方式。
8. 如果所用的內部型別表示某種可能變化的值,請用typedef 為它定義一個有意義的名字。
9. 用typedef為型別定義同義詞,用列舉或類去定義新型別。
10. 切記每個宣告中都必須描述一個型別(沒有“隱式的int”)。
11. 避免有關字元數值的不必要假設。
12. 避免有關整數大小的不必要假設。
13. 避免有關浮點型別表示範圍的不必要假設。
14. 優先使用普通的int 而不是short int 或者long int。
15. 優先使用double 而不是float 或者long double。
16. 優先使用普通的 char 而不是 signed char或者 unsigned char。
17. 避免做出有關物件大小的不必要假設。
18. 避免無符號算術。
19. 應該帶著疑問去看待從signed 到unsigned ,或者從unsigned 到signed 的轉換。
20. 應該帶著疑問去看待從浮點到整型的轉換。
21. 應該帶著疑問去看待向較小型別的轉換,如將int轉換到char。

五、忠告

1. 避免非平凡的指標算術。
2. 當心,不要超出陣列的界線去寫。
3. 儘量使用0而不是NULL。
4. 儘量使用vector 和valarray ,而不是內部(C風格)的陣列。
5. 儘量使用string而不是以0結尾的char 陣列。
6. 儘量少用普通的引用引數。
7. 避免 void*,除了在某些低階程式碼裡。
8. 避免在程式碼中使用非平凡的文字量(“神秘的數”)。相反,應該定義和使用各種符號常量。

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

相關文章