如果不需要修改代码,只需要使用新平台的编译器就能使得程序运行良好,则该程序是可移植的。

在可移植性方面存在两个障碍:一个是硬件,一个是语言差异。例如,windows、Red Hat Linux、Mac OS上的C++实现可能不同。于是,美国国家标准局(AmericanNationalStandardsInstitute,ANSI)在1990年设立了一个委员会(ANSI X3J16),专门负责制定C++标准(ANSI制定了C语言标准)。国际标准化组织(ISO)很快通过自己的委员会(ISO-WG-21)加入了这个行列,创建了联合组织ANSI/ISO,致力于制定C++标准。

1998年发布了ISO/IEC 14882:1998,称为C++98。2003年发布了IOS/IEC14882:2003,称为C++03。由于C++03没有改变语言特性,因此我们使用C++98表示C++98/C++2003。

2001年8月批准了ISO/IEC14882:2011,,该标准以前称为C++11。

在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++也使用这个厍。ANSI/ISO 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++11新增的一些特性。第18章专门介绍新特性。在编写本书期间,对C++11的支持还不全面,因此难以全面介绍C++11新增的所有特性。本书重点介绍大多数编译器都支持的特性。