C++简史

        C++的历史可以追溯到1979年,当时 Bjarne Stroustrup正在做他的博士论文,并且能够使用的唯一一种编程语言就是Simula(一种用来进行仿真的编程语言)。Simula67是公认为的第一种面向对象的编程语言,在使用过程中,Stroustrup发现使用面向对象的方法进行软件开发有很多益处,但Simula语言太过笨重,不适用于实际应用。

         正是出于这个原因,Stroustrup开始对C语言进行改进,在C语言的基础上添加了类、基本的继承、内联、默认参数和强类型检查机制,并且尽可能的保持C语言的性能。

        第一个支持面向对象的C编译器称作Cfront,是从传统C编译器CPre基础上发展而来的。当时Cfront是通过将面向对象的C代码转换为面向过程的C代码,然后再编译成机器代码来实现面向对象C的编译的。并且,Cfront使用面向对象的C进行编写的。但是,由于Cfront的扩展性不是很强,加入新的特性很是困难(例如C++中的异常),所以在1993年就不在使用了。

        1983年,C++语言正式出现了。之所以称之为C++是取自++操作符在C中的寓意,代表C++是在C基础之上发展起来的。与此同时,在C++中又加入了很多特征,包括:重载、引用、‘const’关键字、单行注释(从BCPL中借鉴来的)等等。

        1985年,Stroustrup出版了C++的参考书《 The C++ Programming Language 》。同年,C++在商业标准下进行了实现,但由于此时C++还不具备官方标准,所以那本书成为了重要的参考手册。在1989年,C++中又加入了protected和static关键字,同时加入了多继承机制(从多个类继承)。

        1990年,《The Annotated C++ ReferenceManual》参考手册出版了。同年发布了TurboC++编译器,其中加入了很多标准库之外的支撑库。尽管Turbo C++在2006年就不在进行开发了,但对C++的发展产生了巨大的影响。

        1998年,在《The Annotated C++ ReferenceManual》推动之下,第一个C++国际标准出炉: C++ ISO/IEC 14882:1998。C++98的STL(The StandardTemplate Library,标准库)包含了自1979年开发的所有标准。2003年,根据各方面收集的C++ bugs报告,C++标准协会对C++进行了修订,发布了C++03标准。

        2005年,C++标准协会发布了一份技术报告,报告中描述了即将加入到C++中的新特征,并且将新的标准命名为C++0x,希望能够在20世纪头十年中发布这个标准。然而这个标准的定制直到2011年才完成。但在标准发布之前,很多编译器已经加入了对此标准的新特征的支持。

        2011年,C++11标准终于完成了。这些新的特征包括:正则表达式、新的随机数库、新的时间库、atomicssupport、线程库、新的for循环方式(类似于foreach)、auto关键字、新的容器类、更好的支持unions和array-initializationlists,以及 variadictemplates。


C++语言发展大概可以分为三个阶段:

第一阶段

从80年代到1995年。这一阶段C++语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额;

第二阶段

从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C++中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C++受到了一定的冲击;

第三阶段

从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C++出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C++已经成为当今主流程序设计语言中最复杂的一员。

 

计算机诞生初期,人们要使用计算机必须用机器语言或汇编语言编写程序。世界上第一种计算机高级语言诞生于1954年,它是FORTRAN语言。先后出现了多种计算机高级语言。其中使用最广泛、影响最大的当推BASIC语言和C语言:BASIC语言是1964年在FORTRAN语言的基础上简化而成的, 它是为初学者设计的小型高级语言;C语言是1972年由美国贝尔实验室的D.M.Ritchie研制成功的。它不是为初学者设计的,而是为计算机专业人员设计的。大多数系统软件和许多应用软件都是用C语言编写的,但是随着软件规模的增大,用C语言编写程序渐渐显得有些吃力了。

在C基础上,1983年又由贝尔实验室的BjarneStroustrup推出了C++。 C++进一步扩充和完善了C语言,成为一种面向 对象的程序设计语言。C++目前流行的编译器最新版本是GCC 4.8.2和Microsoft Visual Studio 2013。C++提出了一些更为深入的概念,它所支持的这些面向对象的概念容易将问题空间直接地映射到程序空间,为程序员提供了一种与传统结构程序设计不同的思维方式和编程方法。因而也增加了整个语言的复杂性,掌握起来有一定难度。

C++由美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普博士在20世纪80年代初期发明并实现(最初这种语言被称作“C with Classes”,即“带类的C”)。 C++保留了C语言原有的所有优点,增加了面向对象的机制。开始,C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtualfunction)、运算符重载(OperatorOverloading)、多重继承(MultipleInheritance)、模板(Template)、异常(Exception)、RTTI、命名空间(namespace)逐渐被加入标准。

1998年国际标准组织(InternationalOrganization for Standardization, ISO)第一次颁布了C++程序设计语言的国际标准ISO/IEC14882:1998。此后C++是具有国际标准的编程语言,该标准通常简称ANSI C++或ISO C++ 98标准,以后每5年视实际需要更新一次标准。后来又在2003年通过了C++的第二个标准ISO/IEC 14882:2003,简称ISO C++ 03标准。此后,新的标准草案叫做C++ 0x。对于C++ 0x标准草案的最终国际投票已于2011年8月10日结束,并且所有国家都投出了赞成票,C++0x已经毫无疑义地成为正式国际标准。先前被临时命名为C++0x的新标准正式定名为ISO/IEC 14882:2011,简称ISO C++ 11标准。C++ 11标准将取代现行的C++标准C++98和C++03。国际标准化组织于2011年9月1日出版发布《ISO/IEC 14882:2011》,名称是:Information technology --Programming languages -- C++ Edition: 3。

C++这个名字是RickMascitti于1983年中所建议的,并于1983年12月首次使用。更早以前,尚在研究阶段的发展中语言曾被称为“new C”,之后是“C withClasses”。在计算机科学中,C++仍被称为C语言的上层结构。它最后得名于C语言中的“++”操作符(其对变量的值进行递增)。而且在共同的命名约定中,使用“+”以表示增强的程序。Stroustrup说:“这个名字象征著源自于C语言变化的自然演进”。C+是一个和C/C++无关的早期编程语言。

Rick Mascitti在1992年被非正式地问起名字的由来,他表示这是在半开玩笑中说出的。他从没想过C++会成为这门语言的正式名字。有一个关于C++名字的笑话,当你使用后缀++时,附加只发生在运算之后(因此,它应该是++C,而不是C++,这个笑话是说时下某些程序员还在以使用C的方式使用C++,这通常被一些权威著作认为是不正确的)。

C++是由C发展而来的,与C兼容。用C语言写的程序基本上可以不加修改地用于C++。从C++的名字可以看出它是C的超越和集中。C++既可用于面向过程的结构化程序设计,又可用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。

C++对C的“增强”,表现在六个方面:

(1) 类型检查更为严格。

(2) 增加了面向对象的机制。

(3) 增加了泛型编程的机制(Template)。

(4) 增加了异常处理。

(5) 增加了运算符重载。

(6) 增加了标准模板库(STL)。

面向对象程序设计,是针对开发较大规模的程序而提出来的,目的是提高软件开发的效率。不要把面向对象和面向过程对立起来,面向对象和面向过程不是矛盾的,而是各有用途、互为补充的。

学习C++,既要会利用C++进行面向过程的结构化程序设计,也要会利用C++进行面向对象的程序设计,更要会利用模板进行泛型编程。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值