1-1 C++ 的历史
首先我们来简单地学习一下 C++ 的历史。
C++ 的历史
1979 年,美国贝尔实验室的本贾尼·斯特劳斯特鲁普(Bjarne Stroustrup)博士为了描述事件驱动型的模拟器,创造了由 C 语言扩展而成的编程语言。该语言被称为带类的 C(C with classes),具有从 Simula 67 引入的面向对象的基础——类的概念,以及对函数参数强制执行类型检查等功能。因此,可以说 C 语言和 Simula 67 是它的双亲(图 1-1)。
图 1-1 C++ 和它的双亲
1983 年,该语言又引入了虚函数和运算符重载等功能。1983 年,里克·马克西帝(Rick Mascitti)将其改名为 C++(C plus plus),这一名称是在它的基础语言 C 的后面添加 ++ 符号形成的。另外,++
也是 C 语言的一个运算符,它有以下功能(详见第3章)。
给值仅增加 1
个单位。
与 D 这样的名称相比,C++ 这个名称比较低调。这表示它是由 C 语言扩展而来的,不是与 C 语言完全不同的语言。同时也可以认为这表现出了斯特劳斯特鲁普博士对 C 语言心存敬意。
1983 年,面向大学的 C++ 颁布。1985 年,商业化的 Release 1.0 开始售卖。C++ 至今已经有了很多版本。
斯特劳斯特鲁普博士编写的 The C++ Programming Language 一书于 1986 年出版,该书就相当于 Release 1.0 版本的 C++ 的说明书。后来相继公布的 Release 1.1 和 1.2 等版本在该版本的基础上引入了限定作用域等功能,并且实施了若干改良。
后来,C++ 又新增了多重继承等功能,并进行了大幅度的改良,发布了 Release 2.0 版本。
1990 年,斯特劳斯特鲁普与玛格丽特· A. 埃利斯(Margaret A. Ellis)共同编写的 The Annotated C++ Reference Manual 出版,该书相当于 Release 2.1 版本的 C++ 的完整的语法书。书中介绍了模板和异常处理等未来可能新增的功能。在 Release 3.0 版本中,模板被正式引入了 C++。
斯特劳斯特鲁普博士在 1997 年出版的 The C++ Programming Language, Third Edition 中介绍了最新的 C++。
通过包括斯特劳斯特鲁普博士在内的许多人的努力,C++ 的标准规范被制定,并不断被修订。虽然标准规范的正式名称为第1 版、第2 版……但是在一般情况下,人们习惯在“C++”后添加规范制定年份中的后两位数,简单地称为 C++98、C++03、C++11、C++14、C++17……
▶ 作为标准规范,C 语言和 C++ 等编程语言的国际规范和各国的国内规范是由以下组织制定的。
●国际规范:国际标准化组织(International Organization for Standardization,ISO)
●美国规范:美国国家标准学会(American National Standards Institute,ANSI)
●日本规范:日本工业标准(Japanese Industrial Standards,JIS)
除了体裁等细节,这些规范(基本上)是一样的。
第2 版(C++03)是第1 版(C++98)的小改动版本。
另外,作为母语言的 C 语言被称为 C89、C99、C11……
2013 年,斯特劳斯特鲁普博士编写的 The C++ Programming Language, Fourth Edition 一书出版,该书详细介绍了 C++11 的所有内容。
▶ C++ 在还被称为带类的 C 时,就已经具有了类、类的派生、访问控制、构造函数、析构函数和函数参数检查等核心功能。
然后又添加了虚函数、重载、运算符重载、引用、I/O 流库和复数库等功能,并更名为 C++。
C++98 中增加了使用模板的泛型编程、异常处理、命名空间、动态类型转换、泛型容器和算法库等功能。
C++11 中增加了统一形式的初始化语法、移动语义、可变参数模板、Lambda 表达式、类型别名、适用于并行处理的内存模型、线程库和锁库等功能。
本书将以 C++03 为基础,并补充说明 C++11 的新功能。