1. 程式人生 > >effective C++筆記--雜項討論

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.智慧指標

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開發者電郵名單投遞作品,後期進行復雜的迴圈週期,獲得一切滿足為止。