Item 54:熟悉一下标准库,比如TR1

Item 54: Familiarize yourself with the standard library, including TR1.

C++这个名字是在1983年由Rick Mascitti提出的,C++的曾用名还有”new C”, “C with Classes”。 1998年ISO/IEC 14882发布了第一个C++标准,就是我们常讲的C++98。后续的标准还包括C++03,C++TR1,C++11,C++14。 值得一提的是C++11标准,它已经被主流编译器支持。包含了核心语言的新机能,而且扩展C++标准程序库,并入了大部分的C++ TR1程序库。 Effective C++ Edition 3中大部分std::tr1都可以在std下直接访问了。

我们来回顾一下C++98中的内容:

  • STL(standard template library),包括容器迭代器和算法。
  • IOstream,支持标准IO,用户定义IO,以及预定义对象:cincoutcerrclog
  • 国际化支持。如wchar_t为16位Unicode字符。
  • 数字处理。加入了complexvalarray等。
  • 异常成绩。包括基类exception, 子类logic_errorruntime_error等。
  • C89的标准库。1989年的C标准库都并入了C++98。

Effective C++ Edition 3中提到了很多TR1(technical report 1)的概念:

  • 智能指针:TR1::shared_ptrTR1::weak_ptrTR1::auto_ptr等,见Item 13
  • TR1::function:可以代表一个可调用的实体,可以是函数、函数对象等,见Item 35
  • TR1::bind:将某个函数绑定到某个对象上(即替换this),见Item35
  • 哈希表:TR1::unordered_setTR1::unordered_multisetTR1::unordered_mapTR1::unordered_multimap
  • 正则表达式
  • 元组:在STL中本已有一个pair模板来包含两个元素,在TR1中提出了不限元素数量的TR1::tuple
  • TR1::array:STL风格的数组。
  • TR1::mem_fn:提供了统一的方式来适配成员函数指针。
  • TR1::reference_wrapper:使得引用更像一个对象,原本在容器中只能存储指针和对象的。
  • 随机数:C++的rand来自于C89标准中,TR1给出了更好的随机数算法。
  • 特殊数学函数:拉格朗日多项式、贝塞尔函数、椭圆积分等。
  • C99兼容的扩展:引入了很多C99的特性。
  • 类型特征(traits):一个类模板,用来在编译期标识类型信息,见Item 47
  • TR1::result_of:一个模板,用来推导函数调用的返回类型。

Boost是一个值得我们去探索的社区,TR1中14个部分有10个是从Boost社区来的。Boost提供给的是一个模板库,只需要指定INCLUDE PATH即可, 安装Boost甚至不需要build。因为TR1里的特性在Boost基本都有,你可以告诉你的编译器把tr1当做boost

namespace std{
    namespace tr1 = ::boost;
}

Item 25中提到,如果你在std下私自添加东西会导致未定义行为。但上述的代码在实践中通常没什么问题。

总之,标准C++库是由STL, iostream, 本地化,C99组成的。TR1添加了智能指针、通用函数指针、哈希容器、正则表达式以及其他10个组件。 TR1在是一个标准(standard),为了使用TR1你需要一个TR1的实现(implementation),Boost就是一个很好的TR1实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值