《C++ Primer Plus(第6版)中文版》——1.3 可移植性和标准

简介:

本节书摘来自异步社区出版社《C++ Primer Plus(第6版)中文版》一书中的第1章,第1.3节,作者: 【美】Stephen Prata,更多章节内容可以访问云栖社区“异步社区”公众号查看。

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++之前,先介绍一些有关程序创建的基本知识。

相关文章
|
4月前
|
C++
来自C++ Primer 5的函数指针的定义,调用等
来自C++ Primer 5的函数指针的定义,调用等
15 0
|
6月前
|
编译器 Linux C语言
C++Primer 【学习笔记】第一章 深思
main 函数在很多方面都比较特别,其中最重要的是每个 0+程序必须含有 main 函数,且 main 函数是(唯一)被操作系统显式调用的函数。
33 0
|
7月前
|
存储 编译器 程序员
C++ Primer Plus 第6版 读书笔记(10) 第十章 类与对象
C++ Primer Plus 第6版 读书笔记(10) 第十章 类与对象
38 0
|
7月前
|
存储 关系型数据库 编译器
C++ Primer Plus 第6版 读书笔记(9)第 9章 函数——内存模型和名称空间
C++ Primer Plus 第6版 读书笔记(9)第 9章 函数——内存模型和名称空间
65 1
|
7月前
|
存储 算法 编译器
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(二)
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(二)
32 1
|
7月前
|
存储 Java 编译器
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(一)
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(一)
23 0
|
4天前
|
编译器 C++
【C++】一文全解四种经典 [ 特殊类 ]的设计
【C++】一文全解四种经典 [ 特殊类 ]的设计
|
4天前
|
编译器 C语言 C++
c++初阶------类和对象(六大默认构造函数的揭破)-3
c++初阶------类和对象(六大默认构造函数的揭破)
|
4天前
|
编译器 C语言 C++
c++初阶------类和对象(六大默认构造函数的揭破)-2
c++初阶------类和对象(六大默认构造函数的揭破)
|
4天前
|
存储 编译器 C语言
c++初阶------类和对象(六大默认构造函数的揭破)-1
c++初阶------类和对象(六大默认构造函数的揭破)