More Effective C++ 条款35 让自己习惯于标准C++ 语言

(由于本书出版于1996年,因此当时的新特性现在来说可能已经习以为常,但现在重新了解反而会起到了解C++变迁的作用)

1. 1990年后C++的重要改变

    1). 增加了新的语言特性:RTTI,namespaces,bool,关键词mutable和explicit,enums作为重载函数之自变量所引发的类型晋升转换,以及"在class 定义区内直接为整数型(intergral) const static class members设定初值"的能力.

    2). 扩充了Templates的特性:允许member templates存在,接纳"明白只是template当场实例化"的标准语法,允许function templates接受"非类型自变量(non-type atguments)",可用class templates作为其他template的自变量.

    3). 强化了异常处理机制(Exception handling):编译期间更严密地检验exception specifications,允许unexcpted函数抛出bad_exception对象.

    4).修改了内存分配例程:假如operator new[]和operator delete[],内存未能分配成功时由operator new/new[]抛出一个异常,提供一个operator new/new[]新版本,在内存分配失败后返回0.

    5). 增加了新的转型形式:static_cast,dynamic_cast,const_cast和reinterpret_cast

2. 标准程序库的能力

    1). 支持C标准函数库.

    2). 支持strings.

    3). 支持国别(本土化,localization).不同文化使用不同字符集以及不同的日期,时间,排序事物,货币值等显式习俗.

    4). 支持I/O.

    5). 支持数值应用.支持复数和数组类,提供常用函数,包括"部分和(partial sum)"以及"相邻差值(adjacent difference)".

3. 标准库特点

    1). 高度模板化——每一样东西几乎都是template.例如string是basic_string<char>的typedef(basic_string还可支持wide char,unicode char),IOstreams也是template,它有个类型参数(type parameter)用来定义streams(数据流)的字符类型.

    2). 所有成分都位于namespace std内.

4. Standart Template Library(STL)

    1). STL占据了C++标准库的大部分,主要包括三部分:容器(container),迭代器(iterator),泛型算法(algorithm).其中容器持有对象,迭代器用于遍历容器元素,泛型算法则基于迭代器实现不依赖于具体类型的函数模板.

    2). STL是可扩充的,只要遵循STL的标准,可以将自己的容器,迭代器,算法等结合STL使用.(要使自定义的迭代器适用于STL的泛型算法,需要了解C++的traits技法,见Effective C++ 条款47)

posted @ 2015-10-14 21:48  Reasno  阅读(374)  评论(0编辑  收藏  举报