一. 内容
-
新版本的 C++ 或许会具有某些新的有趣特性,但大部分新机能都是以标准程序库的扩充形式体现。如果我们不了解相关的信息,就很难成为一位高效的 C++ 程序员。
-
C++ 98 的标准程序库成分
:- STL(Standard Template Library,标准模板库),覆盖容器(containers 如 vector,string,map),迭代器(iterators),算法(algorithm 如 find,sort,transform),函数对象(function objects 如 less,greater),各种容器适配器(container adapters 如 stack,priority_queue)和函数对象适配器(function object adapters 如 mem_fun,not1).
- Iostreams。覆盖用户自定缓冲功能,国际化 I/O,以及预先定义好的对象 cin,cout,cerr 和 log。
- 国际化支持,包括多地区(multiple active locales)能力。像 wchar_t 和 wstring。
- 数值处理,包括复数模板(complex)和纯数值数组(val-array)。
- 异常阶层体系(exception hierarchy),包括 base class exception 及其 derived classes logic_error 和 runtime_error,以及更深继承的各个 classes。
- C89 标准程序库。1989年 C 标准程序库内的每一个东西也被覆盖于 C++ 内。
如果你对上述任何一项不是很熟悉,建议抽出一些时间好好阅读相关书籍。
-
新的机能被详细叙述于一份名为
TR1 (Technical Report 1)的文档
。它详细描述了 14 个新组件,统统放在 std 命名空间。比如 shared_ptr 全称为 std::tr1::shared_ptr。- 智能指针(smart pointer),包括 shared_ptr,weak_ptr…用于管理资源。
- tr1::function,表示任何可调用之物,也就是函数或者函数对象。
- tr1::bind,STL 绑定器,用于绑定函数指针。
- hash tables,用来实现 sets,multi-sets,maps 和 multi-maps。注意其中元素无序。
- 正则表达式(Regular expressions),包括以正则表达式为基础的字符串查找和替换。
- tuples(变量组),这是 pair template 的升级版,可用于持有任意个对象。
- tr1::array,本质上是一个 STL 化的数组。
- tr1::mem_fn,这是一个语句构造上与成员函数指针一致的东西。
- tr1::reference_wrapper,它可以让容器像持有 reference 一样。
- 随机数(random number),它大大超越了 C 的 rand 函数。
- 数学特殊函数,包括 Lagureere 多项式,Bessel 函数,完全椭圆积分,以及更多的函数。
- C99 兼容扩充。这是一大堆函数和模板(templates),用来将许多新的 C99 程序库特性带进 C++。
- type traits,一组 traits classes,用以提供类型的编译期信息。
- tr1::result_of,这是一个 template,用以推导函数调用的返回类型。
但注意 TR1 只是一份文档,它所规范的那些机能,还需要编译器去实现。而且可能已经被更新,最新的信息可以去咨询相关网站。有些当前编译期未提供的机能,可以看看
Boost 程序库
,相信你会大有收获。
二. 总结
- C++ 标准程序库的主要机能由 STL,iostreams,locales 组成。并包括 C99 标准程序库。
- TR1 添加了智能指针(例如 tr1::shared_ptr),一般化函数指针(tr1::function),hash-based 容器,正则表达式(regular expressions)以及另外 10 个组件的支持。
- TR1 自身只是一份规范,为获得 TR1 提供的好处,你需要一份实物。一个好的实物来源是 Boost。