从C到C++ 1、从C到C++ 2、名称由来 3、C++发展历史 4、C++与C的关系 5、C++与C不兼容之处 6、C++大型程序设计优势

  C++是在C语言的基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言 。应用较为广泛,是一种静态数据类型检查的,支持多重编程的通用程序设计语言。它支持过程化程序设计,数据抽象,面向对象设计,制作图标等多种程序设计风格。

2、名称由来

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

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

3、C++发展历史

  在“C with Class”阶段,研制者在C语言的基础上加进去的特征主要有:类及派生类、共有和私有成员的区分、类的构造函数和析构函数、友元、内联函数、赋值运算符的重载等。1985年公布的的C++语言1.0版的内容中又添加了一些重要特征:虚函数的概念、函数和运算符的重载、引用、常量(constant)等。

  1989年推出的2.0版形成了更加完善的支持面向对象程序设计的C++语言,新增加的内容包括:类的保护成员、多重继承、对象的初始化与赋值的递归机制、抽象类、静态成员函数、const成员函数等。

  1993年的C++语言3.0版本是C++语言的进一步完善,其中最重要的新特征是模板(template),此外解决了多重继承产生的二义性问题和相应的构造函数与析构函数的处理等。

  1998年C++标准(ISO/IEC14882 Standard for the C++ Programming Language)得到了国际标准化组织(ISO)和美国标准化协会(ANSI)的批准,标准C++语言及其标准库更体现了C++语言设计的初衷。名字空间的概念、标准模板库(STL)中增加的标准容器类、通用算法类和字符串类型等使得C++语言更为实用。此后C++是具有国际标准的编程语言,该标准通常简称ANSI C++或ISO C++ 98标准,以后每5年视实际需要更新一次标准。

  后来又在2003年通过了C++标准第二版(ISO/IEC 14882:2003):这个新版本是一次技术性修订,对第一版进行了整理——修订错误、减少多义性等,但没有改变语言特性。这个版本常被称为C++03。[1]

  此后,新的标准草案叫做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

日期 事件
1990年 The Annotated C++ Reference Manual, M.A.Ellis和B.Stroustup著。主要描述了C++核心语言,没有涉及库
1998年 第一个国际化的C++语言标准:IOS/IEC 15882:1998。包括了对核心语言及STL、locale、iostream、numeric、string等诸多特性的描述
2003年 第二个国际化的C++语言标准:IOS/IEC 15882:1998。核心语言及库与C++98保持了一致,但包含了TC1(Technical Corrigendum1,技术勘误表1)。自此,C++03取代了C++98。
2005年 TR1(Technical Report l,技术报告1):IOS/IEC TR19768:2005。核心语言不变。TR1作为标准的非规范出版物,其包含了14个可能进人新标准的新程序库
2007年9月 SC22注册(特性)表决。通过了C++0x中核心特性
2008年9月 SC22委员会草案(Committee Draft,CD)表决。基本上所有C++0x的核心特性都完成了,新的C++0x标准草稿包括了13个源自TR1的库及70个库特性,修正了约300个库缺陷。此外,新标准草案还包括了70多个语言特性及约300个语言缺陷的修正
2010年3月 SC22最终委员会草案(Final Committee Draft,FCD)表决。所有核心特性都已经完成,处理了各国代表的评议
2011年11月 JTC1 C++11最终国际化标准草案(Final Draft International Standard,FDIS)发布,即IOS/IEC 15882:2011。新标准在核心语言部分和标准库部分都进行了很大的改进,这包括TR1的大部分内容。但整体的改进还是与先前的C++标准兼容的
2012年2月 在ANSI和ISO商店可以以低于原定价的价格买到C++标准

4、C++与C的关系

  C语言是C++的基础,C++和C语言在很多方面是兼容的。      

  C语言是一个结构化语言,它的重点在于算法与数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事物)控制)。

  C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事物)控制。所以C语言和C++的最大区别在于它们解决问题的思想方法不一样。

C++对C的“增强”,表现在六个方面:
(1) 类型检查更为严格。
(2) 增加了面向对象的机制。
(3) 增加了泛型编程的机制(Template)。
(4) 增加了异常处理。
(5) 增加了运算符重载。
(6) 增加了标准模板库(STL)。

5、C++与C不兼容之处

  C++一般被认为是C的超集合(Superset),但这并不严谨。

  大部分的C代码可以很轻易的在C++中正确编译,但仍有少数差异,导致某些有效的C代码在C++中失效,或者在C++中有不同的行为。 

最常见的差异之一是,C允许从void*隐式转换到其它的指针类型,但C++不允许。下列是有效的C代码:

从void*类型隐式转换为int*类型
int*i=malloc(sizeof(int)*5);

但要使其在C和C++两者皆能运作,就需要使用显式转换:

int*i=(int*)malloc(sizeof(int)*5);

另一个常见的可移植问题是,C++定义了很多的新关键字,如new和,class它们在C程序中,是可以作为识别字(例:变量名)的。

  在C标准(C99)中去除了一些不兼容之处,也支持了一些C++的特性,如//注解,以及在代码中混合声明。不过C99也纳入几个和C++冲突的新特性(如:可变长度数组、原生复数类型和复合逐字常数)。

若要混用C和C++的代码,则所有在C++中调用的C代码,必须放在 extern “C” { /* C代码 */ } 之内。

6、C++大型程序设计优势

  许多传统语言对程序的规模和复杂性有自身的限制。例如,BASIC对于某些类型的问题能很快解决,但是如果这个程序有几页纸长,或者超出该语言的正常解题范围,那么它可能永远算不出结果。C语言同样有这样的限制,例如当程序超过 50 000行时,名字冲突就开始成为问 题。简言之,程序员用光了函数和变量名。另一个特别糟糕的问题是如果    C语言中存在一些小漏洞—错误藏在大程序中,要找出它们是极其困难的。没有清楚的文字告诉程序员,什么时候他的语言会失效,即便有,他也会忽视它们。他不

说“我的 BASIC程序太大,我必须用 C重写”,而是试图硬塞进另外几行,增加额外的性能。
所以额外的花费就悄悄增加了。
设计C++的目的是为了辅助大程序设计,也就是说,去掉小程序和大程序之间复杂性的分
界。当程序员写hello-world类实用程序时,他确实不需要用 OOP、模板、名字空间和异常处理,
但当他需要的时候,这些性能就有用了。而且,编译器在排除错误方面,对于小程序和大程序
一样有效。