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

相关文章
|
8月前
|
SQL 人工智能 算法
技术心得记录:模板函数函数模板FunctionTemplate(C++Primer
技术心得记录:模板函数函数模板FunctionTemplate(C++Primer
|
8月前
|
C++
c++primer plus 6 读书笔记 第十四章 C++中的代码重用
c++primer plus 6 读书笔记 第十四章 C++中的代码重用
|
8月前
|
编译器 数据安全/隐私保护 C++
c++primer plus 6 读书笔记 第十三章 类继承
c++primer plus 6 读书笔记 第十三章 类继承
|
8月前
|
程序员 C++
c++primer plus 6 读书笔记 第十二章 类和动态内存分配
c++primer plus 6 读书笔记 第十二章 类和动态内存分配
|
8月前
|
C++
C++ Primer Plus (第6版)中文版 (使用XMind整理)
C++ Primer Plus (第6版)中文版 (使用XMind整理)
C++ Primer Plus (第6版)中文版 (使用XMind整理)
|
1天前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
1天前
|
安全 编译器 C语言
【C++篇】深度解析类与对象(中)
在上一篇博客中,我们学习了C++类与对象的基础内容。这一次,我们将深入探讨C++类的关键特性,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载、以及取地址运算符的重载。这些内容是理解面向对象编程的关键,也帮助我们更好地掌握C++内存管理的细节和编码的高级技巧。
|
1天前
|
存储 程序员 C语言
【C++篇】深度解析类与对象(上)
在C++中,类和对象是面向对象编程的基础组成部分。通过类,程序员可以对现实世界的实体进行模拟和抽象。类的基本概念包括成员变量、成员函数、访问控制等。本篇博客将介绍C++类与对象的基础知识,为后续学习打下良好的基础。
|
4天前
|
编译器 C语言 C++
类和对象的简述(c++篇)
类和对象的简述(c++篇)
|
1月前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
70 19