Effective C++ 学习笔记 第九章:杂项讨论

第一章见 Effective C++ 学习笔记 第一章:让自己习惯 C++
第二章见 Effective C++ 学习笔记 第二章:构造、析构、赋值运算
第三章见 Effective C++ 学习笔记 第三章:资源管理
第四章见 Effective C++ 学习笔记 第四章:设计与声明
第五章见 Effective C++ 学习笔记 第五章:实现
第六章见 Effective C++ 学习笔记 第六章:继承与面向对象设计
第七章见 Effective C++ 学习笔记 第七章:模板与泛型编程
第八章见 Effective C++ 学习笔记 第八章:定制 new 和 delete
第九章见 Effective C++ 学习笔记 第九章:杂项讨论

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

Pay attention to compiler warnings.

编译器的警告通常都有作用,如果没有真的知道编译器的警告是什么意思,请不要随便忽略它,虽然它不像错误那样会终止程序的编译。

总结

  • 严肃对待编译器的警告信息。努力在你的编译器的最高(最严苛)警告级别下争取“无任何警告”的荣誉。
  • 不要过度依赖编译器的警告功能,因为不同的编译器对待事情的态度不同,一旦移植到另一个编译器下,可能原本依赖的警告信息就不存在了。

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

Familiarize yourself with the standard library, including TR1.

TR1 是一份文档,它并不是 C++ 标准,然而它所包含的大多数内容都被追加到 C++ 11 标准中,如果你使用的编译器支持 C++ 11 标准,那在使用本书中 TR1 的功能时,不需要指定命令空间 std::tr1::,而只需要指定 std::,因为已经包含在了 std 中。

TR1 中包含有一些扩展的 C++ 特性,普遍都有比较好的作用。

TR1 加入到 C++98 的主要内容有:

  • STL:覆盖容器、迭代器、算法、函数对象、容器适配器和函数对象适配器等;
  • iostreams:用户自定义缓冲、国际化I/O,标准对象 cin、cout、cerr 和 clog;
  • 国际化支持:多区域能力,如 Unicode 支持;
  • 数值处理:如复数模板;
  • 异常体系:如基类异常和派生类 logic_error 和 runtime_error;
  • C89 标准库兼容;

目前(C++ 11 之前) TR1 的主要内容:

  • 智能指针:如 shared_ptr 和 weak_ptr;(C++ 11 还新增 unique_ptr 来代替 auto_ptr)

  • 函数对象:tr1::function,相比于函数指针,它的灵活性更高,可以接受任何可以隐式转换为函数参数,或隐式转换为函数返回值的函数对象。在条款 35 中有使用介绍。

  • STL 绑定器:tr1::bind,在条款 35 中有使用介绍。

  • Hash 表:用来实现 hash 版本的 sets, multisets, maps, multi-maps,命名为 unordered_set, unordered_multiset, unordered_map 和 unordered_multimap。

  • 正则表达式。

  • 变量组:能够保存两个对象 tr1::pair 或多个对象 tr1::tuple 的元组对。

  • STL 数组:tr1::array,定长的(静态分配内存)数组,支持 begin, end 等迭代器。

  • mem_fun。

  • reference_wrapper。

  • 随机数:功能超越 rand。

  • 数学函数。(C++ 11 中并没有合入这部分内容)

  • C99 标准库兼容;

  • Type traits:能够在编译期获取类型的信息的操作,比如类型是否是内置类型,是否是 empty class,是否可隐式转换等。

  • tr1::result_of:能够推断函数的返回值类型。

Boost 程序库中实现了不少 TR1 规定的实现(当然,在 C++ 11 中就被顺利的引入标准中)。
再次说明,TR1 只是一份文档,有参考其做的一些实现的库,最成功的就是 Boost 库。

C++ 11 之后,一度是提出过 TR2 ,但后来又换掉了,目前不再有 TR2,有关于新版本 C++ 标准的意见,是通过多个不同的标准草案提出。

总结

  • C++ 标准库中主要由 STL、iostreams、locales 等组成,并包含 C99 标准库。
  • TR1 中添加了智能指针、函数对象、hash table、正则表达式等组件支持。
  • TR1 本身只是一份规范,一个很好的实现参考可见 Boost。

条款 55:让自己熟悉 Boost

Familiarize yourself with Boost.

Boost 是一个 C++ 程序库开发社区,这样的社区有好多,但 Boost 中有很大一部分成员是 C++ 标准委员会的成员,所以它和 C++ 标准委员会的联系非常紧密,Boost 中的程序实现很多会包括在后续的 C++ 标准中。我们可以从 Boost 中了解一些未来 C++ 设计的内容。

Boost 接受新程序库的方法需要多次审查,看起来比较严格,但这也从而保障了标准库中的代码质量。

总结

  • Boost 是一个社群,也是一个网站。致力于免费、源码开放、同僚互审的 C++ 程序库开发。Boost 在 C++ 标准化过程中扮演着很有影响力的角色。
  • Boost 提供许多 TR1 组件实现品,以及其他许多程序库。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值