读书人

C++ Standard Library-Chapter 二 amp; C

发布时间: 2012-09-05 15:19:34 作者: rapoo

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分配器。主要用于对对象的内存分配和释放,在原始的内存分配和释放上封装一层,使用者无需知道内存是如何被分配,分配了多少等。

读书人网 >C++

热点推荐