0
点赞
收藏
分享

微信扫一扫

Effective C++第九章笔记

一叶轻舟okok 2022-04-16 阅读 80
c++

文章目录

九、杂项讨论

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

一旦从某个特定编译器的警告信息中获取经验,将学会了解不同的信息意味什么,那往往和它们“看起来”的意义十分不同。对警告信息深刻理解后,就可以选择忽略某些警告信息。

警告与编译器相依,不同编译器有不同警告标准。草率编程指望编译器为你指出错误,不可取。

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

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

TR1代表“Technical Report 1”,表示了新版C++的来临,称为Standard C++ 1.1。

C++98的标准程序库主要成分:

  • STL
  • iostream
  • 国际化支持,包括多区域(multiple active local)能力。像wchar_t和wstring等类型对促进Unicode有所帮助。
  • 数值处理,包括复数模板(complex)和纯数值数组(valarray)。
  • 异常阶层体系(exception hierarchy),包括base class exception和derived class logic_error和runtime_error,以及更深继承的各个class。
  • C89标准库

TR1有14个组件(std::tr1::…):

  • 智能指针
  • tr1::function,此物得以表示任何callable entity(可调用物,也就是任何函数或函数对象),只要其签名符合目标。
  • tr1::bind,它能够做STL绑定器(binders)bind1st和bind2nd所做的每一件事,而又更多。
  • 互不干涉的一组
    • Hash table,用来实现set、multiset和multi-map。
    • 正则表达式
    • Tuple(变量组),标准程序库中的pair template的新一代制品。
    • tr1::array,本质上是个“STL化”数组,即一个支持成员函数如begin和end的数组。
    • tr1::mem_fn,这是个语句构造上与成员函数指针一致的东西。
    • tr1::reference_wrapper,一个“让references的行为更像对象”的设施。
    • 随机数生成工具
    • 数学特殊函数
    • C99兼容扩展
  • template编程技术构成:
    • Type traits,一组traits class(详见条款47),用以提供类型的编译期信息。
    • tr1::result_of,这是个 template,用来推导函数调用的返回类型。

TR1的实现:

其本身只是一个文档,但是14个组件中的10个都以Boost为基础实现,其余4个没有(hash table有很多免费或商业源代码)。如果作为权宜之计你想使用Boost中类似TR1的库,你可以像下面这样使用:

namespace std{
    namespace tr1 = ::boost;
}

如果编译器提供了tr1实现,删除上面的namespace别名就行。

条款55:让自己熟悉Boost

Boost是社群,也是网站。在C++标准化过程中极具影响力。

Boost内含十个程序库,且不断被加入,偶尔有机能被新的库替代。

Boost个程序库大小及作用范围有很大变化。

Boost程序库对付的主题非常繁多,区分数十个类目,包括:

  • 字符串与文本处理,覆盖具备类型安全的printf-like格式化动作,正则表达式和解析。
  • 容器,覆盖“接口与STL相似且大小固定”的数组,大小可变的bitsets以及多维数组。
  • 函数对象和高级编程,覆盖若干用来作为TR1机能基础的程序库。其中一个程序库是Lambda,它使得可以轻松地创建函数对象。
  • 泛型编程(Generic programming),覆盖一大组traits class,详见条款47。
  • 模板元编程(Template metaprogramming,TMP,详见 条款48),覆盖一个针对编译期assertion而写的程序库,以及Boost MPL程序库。
  • 正确性测试(Correctness and testing),覆盖用来将隐式模板接口(implicit template interfaces,详见条款41)形式化的程序库,以及针对“测试优先”编程形态而设计的措施。
  • 数据结构
  • 语言间支持
  • 内存,覆盖Pool程序库,用来做出高效率而区块带下固定的分配器(详见条款50),以及多变化的智能指针(详见条款13),包括TR1智能指针。
  • 杂项,包括CRC检验、日期和时间处理、文件系统上来回移动。

详细见网站。

举报

相关推荐

0 条评论