Effective C++ 笔记(9.杂项讨论)

条款53:不要轻忽编译器的警告

请记住:
  1. 严肃对待编译器发出的警告信息。努力在你的编译器的最高警告级别下争取“无任何警告”的荣誉。
  2. 不要过度依赖编译器的报警能力,因为不同的编译器对待事情的态度并不相同。一旦移植到另一个编译器上,你原本依赖的警告信息有可能消失。

条款54:让自己熟悉包括TR1在内的标准程序库

C++98列入的C++标准程序库有哪些主要成分:
  • STL,覆盖容器(containers如vector,string,map)、迭代器(iterators)、算法(algorithms如find,sort,transform)、函数对象(function objects 如less,greater)、各种容器适配器(container adapters如stack,priority_queue)和函数对象适配器(function object adapters如 mem_fun,not1)。
  • Iostreams,覆盖用户自定缓冲功能、国际化I/O,以及预先定义好的对象cin,cout,cerr和clog。
  • 国际化支持,包括多区域(multiple active locales)能力。像wchar_t(通常是16bits/char)和wstring(由wchar_ts组成的strings)等类型都对促进Unicode有所帮助。
  • 数值处理,包括复数模板(complex)和纯数值数组(valarray)。
  • 异常阶层体系(exception hierarchy),包括base class exception及其derived classes logic_error和runtime_error,以及更深继承的各个classes。
  • C89程序库。

TR1组件实例:
  • 智能指针(smart pointers)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), 包括以正则表达式为基础的字符串查找和替换,或是从某个匹配字符串到另一个匹配字符串的逐一迭代(iteration)等等。
  • Tuples(变量组),这是标准程序库中的pair template的新一代制品。
  • tr1::array,本质上是个“STL化”数组,即一个支持成员函数如begin和end的数组。
  • tr1::mem_fn,这是个语句构造上与成员函数指针(member function pointers)一致的东西。
  • tr1::reference_wrapper,一个“让reference的行为更像对象”的设施。
  • 随机数(random number)生成工具,它大大超越了rand,那是C++继承自C标准程序库的一个函数。
  • 数学特殊函数,包括Laguerre多项式、Bessel函数、完全椭圆积分(complete elliptic integrals),以及更多数学函数。
  • C99兼容扩充。

第二组TR1组件由更精巧的template编程技术构成:
  • Type traits,一组traits classes,用以提供类型(types)的编译器信息。
  • tr1::result_of,这是个template。用来推导函数调用的返回类型。

请记住:
  1. C++标准程序库的主要机能由STL、iostreams、locales组成。并包含C99标准程序库。
  2. TR1添加了智能指针、一般化函数指针、hash-based容器、正则表达式(regular expressions)以及另外10个组件的支持。
  3. TR1自身只是一份规范。为获得TR1提供的好处。你需要一份实物。一个好的实物来源是Boost。

条款55:让自己熟悉Boost

Boost程序库区分数十个类目,包括:
  • 字符串与文本处理,覆盖具备类型安全(type-safe)的printf-like格式化动作、正则表达式,以及语汇单元切割(tokenizing)和解析(parsing)。
  • 容器,覆盖“接口与STL相似且大小固定”的数组、大小可变的bitsets以及多维数组。
  • 函数对象和高级编程。覆盖若干被用来作为TR1机能基础的程序库。
  • 泛型编程(Generic programming),覆盖一大组traits classes。
  • 模板元编程(Template metaprogramming,TMP),覆盖一个针对编译期assertions而写的程序库,以及Boost MPL程序库。
  • 数学和数值(Math and numerics),包括有理数、八元数和四元数、常见的公约数和少见的多重运算、随机数。
  • 正确性与测试(Correctness and testing),覆盖用来将隐式模板接口形式化的程序库,以及针对“测试优先”编程形态而设计的措施。
  • 数据结构,覆盖类型安全的unions以及tuple程序库。
  • 语言间的支持(Inter-language support),包括允许C++和Python之间的无缝互操作性。
  • 内存,覆盖Pool程序库,用来做出高效率而区块大小固定的分配器,以及多边化的智能指针,包括TR1智能指针,
  • 杂项,包括CRC校验、日期和时间的处理、在文件系统上来回移动等等。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值