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

c++Standard——定义c++语言及其标准程序库的规范,TR1详细叙述了14个新组件,都放在std命名空间内

c++98列入的c++标准程序库有哪些主要成分:

stl,覆盖容器、迭代器、算法、函数对象、各种容器适配器和函数对象适配器。

Iostreams,覆盖用户自定缓冲功能,国际化I/o,以及预先定义的对象cin,cout,cerr和clog

国际化支持,包括多区域能力。像wchar_t和wstring(由wchar_ts组成的strings)都对促进Unicode有所帮组。

数值处理,包括复数模板(complex)和纯数值数组(valarray)。

异常阶层体系(exception hierarchy),包括base class exception及其derived classes logic_error和runtime_error,以及更深继承的各个classes。

c89标准程序库。1989 c标准程序库内的每个东西也都被覆盖于c++内。

如果上述任何一项不熟悉,建议好好排除一些时间,带着你最喜爱的c++书籍,把情势扭转过来。

TR1组件:

本书展示:

智能指针tr1::shared_ptr和tr1::weak_ptr。前者的作用有如内置指针,但会记录有多少个tr1::shared_ptrs共同指向同一个对象。所谓的reference counting(引用计数)。一旦最后一个这样的指针被销毁,这个对象被自动删除。但是如果两个或多个这样的指针形成环,这会造成每个对象的引用次数都超过0——即使这个环形的指所有指针都已被销毁。tr1::weak_ptr的设计使其表现像是“非环形tr1::shared_ptr-based数据结构”中的环形感生指针(cycle-including pointers)。tr1::weak_ptr并不参与引用计数的计算;当最后一个指向某对象的tr1::shared_ptr被销毁,纵使还有个tr1::weak_ptrs继续指向同一对象,该对象仍旧会被删除。这种情况下的tr1::weak_ptr会被自动标示无效。

tr1::function,可以表示任何callable entity(可调用物,也就是任何函数或函数对象)

void registerCallbask(std::string fun(int));//参数类型是函数,该函数接受一个int并返回一个string

其中参数名称可有可无:

void registerCallback(std::string (int));

这里std::string (int)是个函数签名。

tr1::function使上述的registerCallback有可能更富弹性地接受任何可调用物(callable entity)。tr1::funtion是个template,以其目标函数的签名为参数:

void registerCallback(std::tr1::function<std::string (int)>func);

tr1::bind,他能够做stl绑定器bind1st和bind2nd所做的每件事,而又更多。是第二代绑定器,比前一代好用的多。条款35有用

其他TR1组件划分为两组。第一组提供彼此不相干的独立机能:

Hash table,用来实现sets,multisets,maps, 和multi-maps。每个新容器的接口都以前任对应器塑模而成,他们的名称:tr1::unordered_set, tr1::unordered_multiset, tr1::unordered_map, tr1::unordered_multimap.

正则表达式

tuples(变量组),pair只能持有两个对象,tr1::tuple可持有任意个数的对象。

tr1::array,大小固定,并不适用动态内存。

tr1::mem_fn,这个语句构造上与成员函数指针(member function pointers)一致的东西。纳入并扩充了c++98的mem_fun和mem_fun_ref的能力。

tr1::reference_wrapper,“让一个reference 的行为更像对象”的设施。

随机数生成工具,大大超越了rand

数学特殊函数,包括Laguerre多项式、Bessel函数、完全椭圆几分,以及更多数学函数。

c99兼容扩充。将许多新的c99程序库特性带进c++。

第二组TR1组件由更精巧的template编程技术(包括template metaprogramming)构成:

type traits,一组traits classes,用以提供类型(types)的编译期信息。

tr1::result_of,这是个template,用来推导函数调用的返回类型。

tr1只是一份文档。为了取得它所规范的那些机能,必须取得实现代码。这写代码最终会随编译器出货。

boost是个Tr1-like机能而言绝佳的资源。tr1中的14个组件中的10个奠基于免费的boost程序库,

可以先用boost代替tr1,别名法:

namespace std{

    namespace tr1 = ::boost;

}

posted @ 2012-02-20 10:43  lidan  阅读(1241)  评论(0编辑  收藏  举报