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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章