Effective C++(八)

来源:互联网 发布:iphone7无法删除软件 编辑:程序博客网 时间:2024/06/06 03:09

    九、杂项讨论

    (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组件实现品,以及其他许多程序库。

0 0
原创粉丝点击