- 内容提要
- 前言
- 第 1 章 预备知识
- 第 2 章 开始学习 C++
- 第 3 章 处理数据
- 第 4 章 复合类型
- 第 5 章 循环和关系表达式
- 第 6 章 分支语句和逻辑运算符
- 第 7 章 函数——C++的编程模块
- 第 8 章 函数探幽
- 第 9 章 内存模型和名称空间
- 第 10 章 对象和类
- 第 11 章 使用类
- 第 12 章 类和动态内存分配
- 第 13 章 类继承
- 第 14 章 C++中的代码重用
- 第 15 章 友元、异常和其他
- 第 16 章 string 类和标准模板库
- 第 17 章 输入、输出和文件
- 第 18 章 探讨 C++新标准
- 附录 A 计数系统
- 附录 B C++保留字
- 附录 C ASCII 字符集
- 附录 D 运算符优先级
- 附录 E 其他运算符
- 附录 F 模板类 string
- 附录 G 标准模板库方法和函数
- 附录 H 精选读物和网上资源
- 附录 I 转换为 ISO 标准 C++
- 附录 J 复习题答案
1.3 可移植性和标准
假设您为运行 Windows 2000 的老式奔腾 PC 编写了一个很好用的 C++程序,而管理人员决定用使用不同操作系统(如 Mac OS X 或 Linux)和处理器(如 SPARC 处理器)的计算机替换它。该程序是否可以在新平台上运行呢?当然,必须使用为新平台设计的 C++编译器对程序重新编译。但是否需要修改编写好的代码呢?如果在不修改代码的情况下,重新编译程序后,程序将运行良好,则该程序是可移植的。
在可移植性方面存在两个障碍,其中的一个是硬件。硬件特定的程序是不可移植的。例如,直接控制 IBM PC 视频卡的程序在涉及 Sun 时将“胡言乱语”(将依赖于硬件的部分放在函数模块中可以最大限度地降低可移植性问题;这样只需重新编写这些模块即可)。本书将避免这种编程。
可移植性的第二个障碍是语言上的差异。口语确实可能产生问题。约克郡的人对某个事件的描述,布鲁克林人可能就听不明白,虽然这两个地方的人都说英语。计算机语言也可能出现方言。Windows XP C++的实现与 Red Hat Linux 或 Macintosh OS X 实现相同吗?虽然多数实现都希望其 C++版本与其他版本兼容,但如果没有准确描述语言工作方式的公开标准,这将很难做到。因此,美国国家标准局(American National Standards Institute,ANSI)在 1990 年设立了一个委员会(ANSI X3J16),专门负责制定 C++标准(ANSI 制定了 C 语言标准)。国际标准化组织(ISO)很快通过自己的委员会(ISO-WG-21)加入了这个行列,创建了联合组织 ANSI/ISO,致力于制定 C++标准。
经过多年的努力,制定出了一个国际标准 ISO/IEC 14882:1998,并于 1998 年获得了 ISO、IEC(International Electrotechnical Committee,国际电工技术委员会)和 ANSI 的批准。该标准常被称为 C++98,它不仅描述了已有的 C++特性,还对该语言进行了扩展,添加了异常、运行阶段类型识别(RTTI)、模板和标准模板库(STL)。2003 年,发布了 C++标准第二版(IOS/IEC 14882:2003);这个新版本是一次技术性修订,这意味着它对第一版进行了整理——修订错误、减少多义性等,但没有改变语言特性。这个版本常被称为 C++03。由于 C++03 没有改变语言特性,因此我们使用 C++98 表示 C++98/C++2003。
C++在不断发展。ISO 标准委员会于 2001 年 8 月批准了新标准 ISO/IEC 14882:2011,该标准以前称为 C++11。与 C++98 一样,C++11 也新增了众多特性。另外,其目标是消除不一致性,让 C++学习和使用起来更容易。该标准还曾被称为 C++0x,最初预期 x 为 7 或 8,但标准制定工作是一个令人疲惫的缓慢过程。所幸的是,可将 0x 视为十六进制数,这意味着委员会只需在 2015 年前完成这项任务即可。根据这个度量标准,委员会还是提前完成了任务。
ISO C++标准还吸收了 ANSI C 语言标准,因为 C++应尽量是 C 语言的超集。这意味着在理想情况下,任何有效的 C 程序都应是有效的 C++程序。ANSI C 与对应的 C++规则之间存在一些差别,但这种差别很小。实际上,ANSI C 加入了 C++首次引入的一些特性,如函数原型和类型限定符 const。
在 ANSI C 出现之前,C 语言社区遵循一种事实标准,该标准基于 Kernighan 和 Ritchie 编写的《The C Programming Language》一书,通常被称为 K&R C;ANSI C 出现后,更简单的 K&R C 有时被称为经典 C(Classic C)。
ANSI C 标准不仅定义了 C 语言,还定义了一个 ANSI C 实现必须支持的标准 C 库。C++也使用了这个库;本书将其称为标准 C 库或标准库。另外,ANSI/ISO C++标准还提供了一个 C++标准类库。
最新的 C 标准为 C99,ISO 和 ANSI 分别于 1999 年和 2000 年批准了该标准。该标准在 C 语言中添加了一些 C++编译器支持的特性,如新的整型。
1.3.1 C++的发展
Stroustrup 编写的《The Programming Language》包含 65 页的参考手册,它成了最初的 C++事实标准。
下一个事实标准是 Ellis 和 Stroustrup 编写的《The Annotated C++ Reference Manual》。
C++98 标准新增了大量特性,其篇幅将近 800 页,且包含的说明很少。
C++11 标准的篇幅长达 1350 页,对旧标准做了大量的补充。
1.3.2 本书遵循的 C++标准
当代的编译器都对 C++98 提供了很好的支持。编写本书期间,有些编译器还支持一些 C++特性;随着新标准获批,对这些特性的支持将很快得到提高。本书反映了当前的情形,详尽地介绍了 C++98,并涵盖了 C++11 新增的一些特性。在探讨相关的 C++98 主题时顺便介绍了一些 C++新特性,而第 18 章专门介绍新特性,它总结了本书前面提到的一些特性,并介绍了其他特性。
在编写本书期间,对 C++11 的支持还不全面,因此难以全面介绍 C++11 新增的所有特性。考虑到篇幅限制,即使这个新标准获得了全面支持,也无法在一本书中全面介绍它。本书重点介绍大多数编译器都支持的特性,并简要地总结其他特性。
详细介绍 C++之前,先介绍一些有关程序创建的基本知识。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论