1.1 C++历史背景
要学一门语言,首先要对这门语言有一定的了解,知道这门语言能做什么,要怎样才能学好。本节将对C++语言的历史背景进行简单的介绍,使读者对C++语言有一个简单而直接的印象。
1.1.1 计算机——20世纪最伟大的发明
计算机的出现给人们的生活带来了巨大的变化,它是如何发展起来的呢?开始时人们致力研究的能够进行四则运算的机器,是通过机械齿轮驱动的加法器,而后是精度只有12位的乘法计算器,直到1847年Charles Babbages开发出能计算31位精度的机械式差分机,普遍认为这台差分机是世界上第一台机械式计算机。随着电子技术的发展,真空二极管、真空三极管问世,到1939年第一部用真空管计算的机器被研制出来,该机器能进行16位加法运算;随后,用氖气灯(霓虹灯)的存储器、复杂数字计算机(断电器计数机)、可编写程序的计数机,一一研制出来。1946年,第一台电子管计算机ENIAC在美国研制出来,这台计算机占地170m2,质量30t,有1.8万个电子管,用十进制计算,运算5000次/s。计算机从此进入了电子计算机时代,经历了真空管计算机、晶体管计算机、集成电路计算机、大规模集成电路计算机4个阶段,每一个阶段都是随着电子技术的发展而发展的,晶体管的出现取代了电子管,将电子元件集成到一片小小的硅片上,形成集成电路(IC),在一块芯片上容纳几百个或是几千个电子元件形成了大规模集成电路(LSI),直到现在已经出现了很薄的电子芯片,可谓发展迅速。
现在计算机已经应用到各个领域,科学计算、信号检测、数据管理、辅助设计都在使用计算机,人们的生活已经渐渐离不开它,所以说计算机是20世纪最伟大的发明。
1.1.2 C++发展历程
早期的计算机程序语言是计算机控制指令,每条指令是一组二进制数,不同的计算机有不同的计算机指令集。使用二进制指令集开发程序是一件很令人头痛的事,需要记住大量的二进制数。为了便于记忆,人们将二进制数用字母组合代替,以字符串关键字代替二进制机器码的编程语言称为汇编语言。汇编语言被称为低级语言,虽然它比机器码容易记忆,但仍然具有可读性差的缺点,大量的跳转指令和地址值很难让程序员在很短的时间理解程序的意思,于是编程语言进入了高级语言时代。
第一种高级语言是美国尤尼法克公司在1952年研制成功的Short Code,被广泛使用的高级语言是FORTRAN,它是由美国科学家John Backus设计并在IBM公司的计算机上实现的。FORTRAN语言和ALGOL60主要应用于科学和工程计算,随后出现了Pascal和C语言。C语言是在其他语言基础上发展起来的。首先是由Richard Martin开发了一种高级语言BCPL,随后Ken Thompson使用BCPL语言对其进行了简化,形成一门新的语言—B语言,B语言没有类型的概念,Dennis M. Ritchie对B语言进行研究和改进,在B语言基础上添加了结构和类型,并将这个改进后的语言命名为C语言,寓意很简单,因为字母C是字母B的下一个字母,预示着语言的发展。
本书介绍的C++语言就是从C语言发展而来的。Bjarne Stroustrup经过钻研在C语言中加入了类的概念,C++最初的名字是C with Class,到1983年12月由Rick Mascitti建议改名为C Plus Plus,即C++。最开始提出类概念的语言是Simula,它具有很高的灵活性,但无法胜任比较大型的程序。此后在Simula语言基础上发展的语言Smalltalk才是真正的面向对象语言,但Smalltalk-80不支持多继承。
C++从Simula继承了类的概念,从ALGOl68继承了运算符重载、引用以及在任何地方声明变量的能力,从BCPL获得了“//”注释,从Ada得到了模板、名字空间,从Ada、Clu和ML取来了异常。
1.1.3 C++领域杰出人物
Dennis M. Ritchie 被赞誉为C语言之父、UNIX之父,生于1941年9月9日,哈佛大学数学博士,曾任朗讯科技公司贝尔实验室(原AT&T实验室)下属的计算机科学研究中心系统软件研究部的主任。他开发了C语言,并著有《C程序设计语言》(The C Programming Language)一书,还和Ken Thompson一起开发了UNIX操作系统。他因杰出的工作成就得到了众多计算机组织的公认和表彰,1983年,获得美国计算机协会颁发的图灵奖(又称计算机界的诺贝尔奖),还获得C&C基金奖、电气与电子工程师协会优秀奖章、美国国家技术奖章等多项大奖。
Dennis M. Ritchie
Bjarne Stroustrup
Bjarne Stroustrup 1950年出生于丹麦,先后毕业于丹麦奥胡斯大学和英国剑桥大学,AT&T大规模程序设计研究部门负责人,AT&T贝尔实验室和ACM成员。1979年,Stroustrup开始开发一种语言,当时称为C with Class,后来演化为C++。1998年,ANSI/ISO C++标准建立,同年,Stroustrup推出其经典著作The C++ Programming Language的第3版。
Scott Meyers 世界顶级C++软件开发技术权威之一。他拥有Brown University的计算机科学博士学位,其著作Effective C++和More Effective C++很受编程人员的喜爱。Scott Meyers曾经是C++ Report的专栏作家,为C/C++ Users Journal和Dr. Dobb’s Journal撰过稿,为全球范围内的客户提供咨询活动。他还是Advisory Boards for NumeriX LLC和InfoCruiser公司的成员。
Scott Meyers
Andrei Alexandrescu 被认为是新一代C++天才的代表人物。2001年,他撰写了经典名著Modern C++ Design,其中对Template技术进行了精湛运用,第一次将模板作为参数在模板编程中使用,该书震撼了整个C++社群,开辟了C++编程领域的Modern C++新时代。此外,他还与Herb Sutter合著了C++ Coding Standards。他在对象拷贝(object copying)、对齐约束(alignment constraint)、多线程编程、异常安全和搜索等领域做出了巨大贡献。
Andrei Alexandrescu
Herb Sutter C++ Standard Committee的主席,作为ISO/ANSI C++标准委员会的委员,Herb Sutter是C++程序设计领域屈指可数的大师之一。他的Exceptional系列3本书(Exceptional C++、More Exceptional C++和Exceptional C++ Style)成为C++程序员必读书。他是深受程序员喜爱的技术讲师和作家,是C/C++ Users Journal的撰稿编辑和专栏作者,曾发表了上百篇软件开发方面的技术文章和论文。他还担任Microsoft Visual C++架构师,和Stan Lippman一起在微软公司主持VC 2005(即C++/CLI)的设计。
Herb Sutter
Andrew Koenig AT&T公司Shannon实验室大规模编程研究部门成员,同时也是C++标准委员会的项目编辑,是一位真正的C++权威。Andrew Koenig的编程经验超过30年,其中有15年在使用C++,已经出版了超过150篇和C++有关的论文,并且在世界范围内就这个主题进行过多次演讲,对C++的最大贡献是带领Alexander Stepanov将STL引入C++标准。
Andrew Koenig