Effective C++(八)

    九、雜項討論

    (53)、不要輕忽編譯器的警告

      class B {

      public:

        virtual void f() const;

      };

      class D : public B {

      publlic:

           virtual void f();

     };

     這裏希望以D::f重新定義virtual函數B::f,但其中有個錯誤:B中的f是個const成員函數,而在D中它未被聲明爲const。我手上的一個編譯器於是這樣說話了:

      warning: D::f() hides virtual B::f()。

      這個警告告訴你聲明於B中的f並未在D中被重新聲明,而是被整個被掩蓋了。如果忽略這個編譯器警告,幾乎肯定導致錯誤的程序行爲,然後是許多調試行爲,只爲了找出編譯器其實早就偵測出來並告訴你的事情。

      不管怎樣說,在你打發某個警告信息之前,請確定你瞭解它意圖說出的精確意義。

     記住,警告信息天生和編譯器相依,不同的編譯器有不同的警告標準。

     請記住:

     嚴肅對待編譯器發出的警告信息。努力在你的編譯器的最高(最嚴苛)警告級別下爭取“無任何警告”的榮譽。

     不要過度依賴編譯器的報警能力,因爲不同的編譯器對待事情的態度並不相同。一旦移植到另一個編譯器上,你原本依賴的警告信息有可能消失。

   


      (54)、讓自己熟悉包括TR1在內的標準程序庫

      TR1代表“Technical Report 1”,宣示一個新版C++的來臨,我們可能稱之爲Standard C++ 1.1。

      C++98列入的C++標準程序庫主要成分:

     STL(Standard Template Library,標準模板庫)。

      Iostreams。

      國際化支持。

      數據處理。

      異常階層體系(exception hierarchy)。    

      C89標準程序庫。

       

      TR1詳細敘述了14個新組建(components,也就是程序庫機能單位),統統都放在std命名空間內,更正確地說是在其嵌套命名空間tr1內。因此,TR1組件shared_ptr的全名是std::shared_ptr。本書通常在討論標準程序庫組件時略而不寫std::,但我總是會在TR1組件之前加上tr1::。

       本書展示一下TR1組件實例:

       智能指針(smart pointer)tr1::shared_ptr和tr1::weak_ptr。

       tr1::function,此物得以表示任何callable entity(可調用物,也就是任何函數或函數對象),只要其簽名符合目標。

       tr1::bind,它能夠做STL綁定器(binders)bind1st和bind2nd所做的每一件事,而又更多。

      

      我把其他TR1組件劃分爲兩組。第一組提供彼此互不相干的獨立機能。

      Hash tables,用來實現sets,multisets,maps和multi-maps。

      正則表達式(Regular expressions)。

      Tuples(變量組),這是標準程序庫中的pair template的新一代製品。

      tr1::array,本質上是個“STL化”數組,即一個支持成員函數如begin和end的數組。

      tr1::mem_fn,這是個語句構造上與成員函數指針(member function pointer)一致的東西。

      tr1::reference_warpper,一個“讓references的行爲更像對象”的設施。

     隨機數(random number)生成工具,它大大超越了rand,那是C++繼承自C標準程序庫的一個函數。

     數學特殊函數。

     C99兼容擴充。

     第二組TR1組件由更精巧的template編程技術(包括template metaprogramming,也就是模板元編程)構成。

     Type traits,一組traits classes,用以提供類型(types)的編譯期信息。

      tr1::result_of,這是個template,用來推導函數調用的返回類型。

      TR1自身只是一份文檔。

      請記住:

       C++標準程序庫的主要機能由STL、iostream、locales組成。幷包含C99標準程序庫。

       TR1添加了智能指針(例如tr1::shared_ptr)、一般化函數指針(tr1::function)、hash-based容器、正則表達式(regular ecpression)以及另外10個組件的支持。

       TR1自身是一份規範。爲獲得TR1提供的好處,你需要一份實物。一個好的實物來源是Boost。



    (55)、讓自己熟悉Boost

      Boost是一個C++開發者集結的社羣,也是一個可自由下載的C++程序庫羣。

      Boost程序庫對付的主題非常繁多,區分數十個類目,包括:

      字符串與文本處理。

      容器。

      函數對象和高級編程

      泛型編程(Generic programming)

      模板元編程(Template metaprogramming,TMP)

      數學和數值(Math and numerics)

      正確性與測試(Correctness and testing)

      數據結構

      語言間的支持

      內存

      雜項

     

      請記住:

       Boost是一個社羣,也是一個網站。致力於免費、源碼開放、同僚複審的C++程序庫開放。Boost在C++標準化過程中扮演深具影響力的角色。

       Boost提供許多TR1組件實現品,以及其他許多程序庫。

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