下面一起对C++语言进行标准化工作,微软并于1998年正式发布了C++语言的国际标准ISO/IEC:98-14882。C++语言已经成为***的程序设计语言之一,希望本文能教会你更多东西。下面就先从C++程序设计说明开始吧。
Bjarne Stroustrup(C++的设计者)对C++的设计和演化的描述C++的设计和演化(The Design and Evolution of C++)C++程序设计语言是由来自AT&T Bell Laboratories的Bjarne Stroustrup(即本文作者)设计和实现的,它兼具Simula语言在组织与设计方面的特性以及适用于系统程序设计的C语言设施。
C++最初的版本被称作“带类的C(C with classes)”[Stroustrup,1980],在1980年被***次投入使用;当时它只支持系统程序设计(§3)和数据抽象技术(§4.1)。支持面向对象程序设计的语言设施在1983年被加入C++;之后,面向对象设计方法和面向对象程序设计技术就逐渐进入了C++领域。
在1985年,C++程序设计***次投入商业市场[Stroustrup,1986][Stroustrup,1986b]。在1987至1989年间,支持范型程序设计的语言设施也被加进了C++[Ellis,1990][Stroustrup,1991]。 随着若干独立开发的C++实现产品的出现和广泛应用,正式的C++标准化工作在1990年启动。标准化工作由ANSI(American National Standard Institute)以及后来加入的ISO(International Standards Organization)负责。1998年正式发布了C++语言的国际标准[C++,1998]。#t#
在标准化工作进展期间,标准委员会充当了一个重要的角色,其发布的C++标准之草案在正式标准发布之前,一直被作为过渡标准而存在。而作为标准委员会中的积极分子,我是C++进一步发展工作中的主要参与者。与以前的C++语言版本相比,标准C++更接近我理想中的那个C++语言了。关于C++的设计和演化,在[Stroustrup,1994]、[Stroustrup,1996]和[Stroustrup,1997b]中有详细的叙述。至于标准化工作末期产生的C++语言定义,在[Stroustrup,1997]有详细叙述。
当然,这些规则要具体结合更多关于基本目标的上下文环境来考虑。应该注意到的是,在“与C有较高的兼容性”、“不损失效率”以及“具有便捷的可用性来解决实际问题”这三个方面的要求,与在“完整的型别安全性”、“完全的通用性”以及“完善的抽象之美”这三个方面的要求形成对立。
C++程序设计从Simula中借鉴了用户自定义型别(class,§4.1)和类层次机制。然而,在Simula及许多类似的语言中,其对用户自定义型别的支持与其对内建型别的支持存在着根本上的不同。例如,Simula中不允许在栈中为用户自定义型别的对象分配空间,并且只允许通过指针(这在Simula中称为引用——reference)来对这些对象进行访问。而相反的,内建型别的对象只在栈中被分配空间,不能在动态存储区中分配,而且不能使用指针指向它。
这种在对待内建型别与对待用户自定义型别上的差异,暗示着对效率问题的严格考虑。比如,当作为一个在动态存储区中被分配的对象之引用时,如果该对象属于自定义型别(比如complex,§4.1),那么就会为运行期及空间带来负荷;
而这些负荷在有些应用中被认为是不可接受的。这些正是C++意欲涉足解决的问题。同时,在用法上的不同也决定了:不可能在范型程序设计中统一对待那些语义上近似的型别。
在C++程序设计中只要在不严重影响其对强型别检查(strong type checking)的支持的地方,都尽量做到与C的“source-link”方式相兼容。除了某些微小的细节差别之外,C++将C[Kernighan,1978][Kernighan,1988]作为一个子集包含了进来。C++与C的兼容性使得C++程序员立刻就能有一个完整的语言和工具集可用。还有两点也很重要,一是有大量关于C的高质量的教学素材已经存在,二是C++程序员可以利用C++与C的兼容性而直接并有效的使用大量现成的程序库。
在决定将C作为C++的基础的时候,C还没有像后来那样出类拔萃、炙手可热,所以在考虑这个问题的时候,与C语言所提供的可适应性和高效性相比,C语言的流行程度只是个次要的考虑因素。
然而,与C的兼容性也使得C++程序设计在某些语法和语义上保留了C的一些瑕疵之处。比如,C语言的声明语法就实在远不及优美;而其内建型别的隐式转换规则也是混乱无章法的。还有另一个大问题,就是许多从C转向C++的程序员并没有认识到,代码质量上的显著提高只能通过在程序设计风格上的显著改变来达到。