提示:如果想上来就开始学的可以直接跳过第一章
1 C++的历史
C++的前身是“C with classes”,由“C++之父”比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup)研发创造。1979年,比雅尼·斯特劳斯特鲁普在准备博士论文的时候使用了Simula语言,其支持面向对象开发。他觉得这种思想非常适合大型应用软件的开发,但是Simula本身的效率太低。之后,斯特劳斯特鲁普就开始研发“Cwith classes”了。这个命名说明了它是在C语言的基础上研发的,包含了C语言的特性。C语言的执行速度快、效率高,而且可移植性也非常好,因此在C语言的基础上加上类和继承等面向对象的特性之后,将发明出一种新的、效率高且能开发大型软件的强大语言。
“C with classes”的第一个编译器叫作Cfront,它的工作原理是把“C with classes”的代码转换成纯C语言的代码。Cfront的代码大多是用“C with classes”编写的,因为难以集成C++的异常处理机制,所以Cfront在1993年就退出了历史舞台,但Cfront对之后的C++编译器和UNIX都产生了深远的影响。
1983年,“Cwith classen”改名为“C++”,许多新特性被加人其中,如虚函数、函数重载、 conxt等。1985年。《C++程序设计语言》(The C++ Programming Language)第1版出版由于没有正式的C++标准,这本书成了当时的重要参考。在此期间,C++又增添了许多功能。1998年,C++编程语言的第一个国际标准++98标准式发布,并且将标准模板库STL收录其中。2011年, C++11标准问世。该版本添加了许多新功能,简化了许多语法,使C++语言的功能更加强大了。
2 C++的发展历程
1979年,比雅尼·斯特劳斯特鲁普首次实现Cwithlasses加类构造函数与析构函数、成员函数、公有私有访问控制类内联参等功能。
1982年,C with Classes参考手册发布。
1984年,C84实现,发布参考手册
1985年,Cfront 1.0发布,增加虚函数、重载、引用、const关键字、new和delete操作符、作用域操作符等特性
同年,《C++程序设计语言》第1版出版
1986年,“whatis?”提案把设计目标写入文档,包含了多重继承、异常处理和模板。
1987年,GCC 1.15.3支持C++(g++)
1989年,Cfront 2.0发布,增加多重继承、保护访问控制、抽象类等特性。1990年,ANSI C++委员会成立。
同年,《C++注解参考手册》(The Annotated C++ Reference Manual)出版
同年,添加命名空间、模板、异常处理等功能。
1991年,Cfront 3.0发布。
同年,ISO C++委员会成立。
同年,《C++程序设计语言》第2版出版。
1992年,STL在C++中实现
1997年,《C++程序设计语言》第3版出版
1998年,C++98标准发布,增加转换运算符、mutable关键字、RTT、bool类型等特性。
1999年,委员会成员成立Boost,旨在开发新的高质量库以作为标准库的候选库
2003年C++03标准发布,添加了新特性一值初始化。
2007年,扩展库TR1发布,将来自Boost以及C99的一些内容添加到C++标准库中。
2010年,扩展C++标准库,添加了一些特殊数学函数。
2011年。C++11标准发布,添加了大量新特性,包括auto和deeltype、右值引用、列表初始化、longlong类型、lambda表达式、区间遍历等。
同年,十进制浮点数TR发布2012年,标准C++基金会成立。
2013年,《C++程序设计语言》第4版出版
2014年,C++14标准发布,添加了变量模板、泛型lambda、二进制字面量等特性。
2017年,C++17标准发布,添加了折叠表达式、inline变量、条件语句的初始化器等特性。
3 C++的特性与使用场景
C++与现在主流的面向对象编程语言有比较大的区别,有一部分原因是C++继承了C语言的绝大部分功能,所以它也能像C语言那样直接使用指针操纵内存,直接与底层交互。也可以知道数据的大小并进行优化;而更新的语言如Java、C#等都建立在类似虚拟机的中间层之上,因此程序员可以进行的优化十分有限。除此之外、C++也支持类、虚函数、继承等能实现面向对象编程的功能,而且还包含模板等支持泛型编程的功能。
对于使用场景来说,随着Web应用以及移动端应用的兴起,尽管已经有越来越多基于其他语言的框架由于易用性等特点取代了基于C++的框架,但是C++作为一种可以接触底层的高效语言,在许多性能敏感的场景中还是无法替代的。这其中包括了游戏编程、音频视频图像处理,以及所有靠近操作系统层的底层系统应用和基础设施。但由于C++实在太灵活了,存在许多导致程序出错的陷阱,致使开发调试成本上升,因此一般的应用程序和工具脚本就没有使用C++的必要了。
4 C++与C语言
C++是在C语言的基础上发展而来的,因此C++几乎支持C语言的所有功能。也可以说,C语言就是C++的一个子集。C++不但不需要花费许多时间去重新定义一些如函数及变量之类的基本程序语言功能,而且大量C程序也无须修改就可以被C++的编译器编译,可以说C++是向前兼容了C语言。
但是,C++与C语言的编程思想并不一样。C语言没有类和面向对象的概念,我们所能做的就只有过程式编程,将指令和数据组织成一块一块的子过程,也就是函数;而C++在C语言的基础上增加了类、模板等功能,编程的思想和范式也不一样了。在使用C++进行程序设计的时候,我们不考虑如何把算法和功能组织成函数,而是考虑如何将程序中的物件抽象为类,并且定义类之间的系和互动。此外,C++可以通过模板实现泛型编程,也就是说,在编程的时候我们不需要考虑函数参数或者容器元素的类型。



