C++重要的几项改变:
- 增加了一些新的语言特性:RTTI、namespaces、bool、关键字mutable和explicit、enums作为重载函数之自变量引发的类型晋升转换,以及“在class定义区内直接为整型 const static class members设定初值”的能力;
- 扩充了Templates的弹性:允许member templates存在、接纳"明白只是template当场实例化"的标准语法、允许function templates接受"非类型自变量(non-type arguments)"、可用class templates作为其他template的自变量;
- 强化了异常处理机制:编译期间更严密地检验exception specifications、允许unexcpted函数抛出bad_exception对象;
- 修改了内存分配例程:加入
operator new[]
和operator delete[]
;内存未能分配成功时由operator new
/new[]
抛出一个异常,提供一个operator new
/new[]
新版本,在内存分配失败后返回0; - 增加了新的转型形式:static_cast,dynamic_cast,const_cast和reinterpret_cast;
- 语言规则更为优雅精炼:重新定义虚函数时,其返回类型不再一定得与原定义完全吻合;此外临时对象的寿命也有了规范。
标准程序库
标准程序库的能力
- 支持C标准函数库;
- 支持strings;
- 支持国别(地域别、本土化、localization);
- 支持I/O;
- 支持数值应用;
- 支持广泛用途的容器和算法;
标准程序库的特点
- 标准程序库中每一样东西几乎都是template;
- 所有成分都位于namespace std内。
Standart Template Library(STL)
C++标准程序库的最大组成分子为STL:
主要包括容器(container)、迭代器(iterator)、泛型算法(algorithm):
- 容器持有一系列对象;
- 迭代器是一种类似指针的对象,用于遍历容器元素;
- 泛型算法是可作用于STL容器身上的函数。
STL是可扩充的,可以将自己的容器、迭代器、算法加入STL家族内。