effective C++筆記--雜項討論
文章目錄
不要輕忽編譯器的警告
. (ps:這條條款真是最容易理解的條款了)
嚴肅對待編譯器發出的警告資訊,努力在編譯器的最高警告級別下爭取“無任何警告”的榮譽。
不要過度依賴編譯器的報警能力,因為不同的編譯器對待不同的事情的態度可能是不同的,一旦程式移植到另一個編譯器上,原本依賴的警告資訊可能失效。
讓自己熟悉包括TR1在內的標準程式庫
. 在概述TR1有些什麼之前,來先回顧一下C++98列入C++標準程式庫有哪些成分:
1.STL,容器、迭代器、演算法(algorithm)、函式物件、各種容器介面卡、各種函式介面卡;
2.Iostream,覆蓋使用者自定緩衝功能、國際化I/O,以及預先定義好的物件cin、cout、cerr和clog;
3.國際化處理,包括多區域能力。像wchar_t和wstring等型別都對促進Unicode有所幫助;
4.數值處理,包括複數模板(complex)和純數值陣列(valarray);
5.異常階層體系,包括base class exception及其derived classes logic_error和runtime_error,以及更深層次的各個classes;
6.C89標準程式庫。
TR1詳細描述了14個新元件,統統放在std名稱空間內,更準確的說是在其巢狀名稱空間tr1內。因此例如shared_ptr的全稱是:std::tr1::shared_ptr。這14個新元件分別是:
1.智慧指標
2.tr1::function。表示任何可呼叫物(函式或是函式物件)。這種寫法可以讓可呼叫物擁有更大的彈性;
3.tr1::bind。他能做繫結器bind1st和bind2nd所做的每件事,而且能做到更多;以上兩條的一般用法
其他TR1元件可以分為兩組。第一組提供互不相干的獨立機能:
4.Hash table,用來實現sets、multisets、maps和multi-maps。就是提供了無序的功能,比如:tr1::unordered_set;
5.正則表示式。主要用於字串查詢與替換等;
6.Tuples(變數組)
7.tr1::array。本質上是“STL化”陣列,即一個支援成員函式begin和end的陣列,不過tr1::array的大小固定,並不使用動態記憶體;
8.tr1::mem_fn。這是個語句構造上和成員函式指標一致的東西,其擴充了C++98的mem_fun和mem_fun_ref的能力;
9.tr1::reference_wrapper。一個讓references的行為更像物件的工具;
10.隨機數生成工具。其大大超越了rand。
11.數學特殊函式
12.C99相容擴充。一大堆的函式和模板。
第二組TR1元件由更精巧的template程式設計技術構成:
13.Type traits。一組traits classes用以提供型別的編譯期資訊,請使用traits classes表現型別資訊;
14.tr1::result_of,這是個template,用來推導函式呼叫的返回型別。
讓自己熟悉Boost
. Boost是一個C++開發者集結的社群,也是一個可自由下載的C++程式庫群,網址為:https://boost.org。(所以說英語還是要學好呀)
Boost有兩個獨特的優點:第一,它和C++標準委員會有著獨一無二的密切關係,並且對委員會深具影響力;第二它接納程式庫的過程。它以公開進行的同僚複審為基礎。如果你打算貢獻一個程式庫給Boost,首先要對Boost開發者電郵名單投遞作品,後期進行復雜的迴圈週期,獲得一切滿足為止。