明解C++
上QQ阅读APP看书,第一时间看更新

首先我们来简单地学习一下 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 语言被称为 C89C99C11……

2013 年,斯特劳斯特鲁普博士编写的 The C++ Programming Language, Fourth Edition 一书出版,该书详细介绍了 C++11 的所有内容。

▶ C++ 在还被称为带类的 C 时,就已经具有了类、类的派生、访问控制、构造函数、析构函数和函数参数检查等核心功能。

 然后又添加了虚函数、重载、运算符重载、引用、I/O 流库和复数库等功能,并更名为 C++

 C++98 中增加了使用模板的泛型编程、异常处理、命名空间、动态类型转换、泛型容器和算法库等功能。

 C++11 中增加了统一形式的初始化语法、移动语义、可变参数模板、Lambda 表达式、类型别名、适用于并行处理的内存模型、线程库和锁库等功能。

 本书将以 C++03 为基础,并补充说明 C++11 的新功能。