不要輕忽編譯器的警告
. (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.智能指針 shared_ptr和weak_ptr。shared_ptr或許是擁有最廣泛用途的TR1組件;
2.tr1::function。表示任何可調用物(函數或是函數對象)。這種寫法可以讓可調用物擁有更大的彈性;
3.tr1::bind。他能做綁定器bind1st和bind2nd所做的每件事,而且能做到更多;以上兩條的一般用法
其他TR1組件可以分爲兩組。第一組提供互不相干的獨立機能:
4.Hash table,用來實現sets、multisets、maps和multi-maps。就是提供了無序的功能,比如:tr1::unordered_set;
5.正則表達式。主要用於字符串查找與替換等;
6.Tuples(變量組)。這是標準庫中的pair template的新一代製品。pair只能持有兩個對象,tr1::tuple可持有任意個數的對象(python中的元組是不是叫這個名);
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.數學特殊函數。包括Laguerre多項式(拉蓋爾多項式)、Bessel函數(貝塞爾函數)等;
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開發者電郵名單投遞作品,後期進行復雜的循環週期,獲得一切滿足爲止。