C++ Standard Library--Chapter 2 & Chapter 3
Chapter 2 Introduction to C++ and the standardy library
?
这章主要是概括地讲一些关于C++的历史和特性。
C++的标准化过程从1989年就开始了,直到1997年才结束(制定标准的过程很漫长,伴随着多方的努力和协商)。不过按照作者的意思,标准化还是没有达到完美的程度,但是产生了一些基本的库和组件(如string,IO,数据结构和算法等)。其实标准化的目标根本就不是为了开发一套全新的库,而是为了整合一些已经存在的库和设计理念(IOStream类就是很好的一个例子,它在1984年已经有了,为了追求兼容性,C++保留了它原来的实现)
?
STL(standardy template library)里面有很多数据结构和算法,在实现过程中也是为了追求语言最好的效率,所以使用者必须对STL有着很好的了解。
?
作者也提到了,标准化的过程是由全世界的数以百计的人共同参与的,中间经历了无数的讨论。在1994年的时候,为了让标准化过程尽快结束,制定者决定不再考虑更多的扩展性,所以一些目前很常用年的数据结构像hash表等,就没有在标准里面。
?
新特性:
1. 模板。几乎所有的STL都是以模板的概念来实现的。所谓模板,就是在一些没有特别标明数据类型的类和函数。书中就有一个例子:
?
class Car; //abstract base class; has at least one virtual functionclass Cabriolet : public Car { ...};class Limousine : public Car { ...};void f (Car* cp){ Cabriolet* p = dynamic_cast<Cabriolet*>(cp); if (p == NULL) { //p did not comfort to Cabriolet ... }}? ?c. const_cast。转化成const或者取消const限制;取消volatile限制
? ?d. reinterpret_cast。根据具体的实现而定。
?
9. main函数只能定义为int main(){...}或者int main(int argc, char *argv[]){...}或者int main(int argc, char **argv){...}。如果最后没有return语句,c++会自动给main函数加return 0。但是部分编译器仍然不允许不加return语句。
?
?
?
Chapter 3 Generic Concepts
?
本章主要讲了C++几个基本的概念。
?
1. 名字空间。主要用来防止函数/类名字冲突。
2. 头文件。C++的标准库的头文件在include的时候不用加.h,.hpp,hxx的后缀。
3. error和exception的处理。把exception分成了几个类别:支持语言特性的exception(如bad_alloc, bad_cast等);标准库的exception(主要都是logic error,如invalid_argument,out_of_range等);运行时的exception(如overflow, underflow等)。
4. allocator分配器。主要用于对对象的内存分配和释放,在原始的内存分配和释放上封装一层,使用者无需知道内存是如何被分配,分配了多少等。