我在本书所谈、所用的C++,是ISO/ANSI 标准委员会於1997 年11 月完成的C++国际标准最後草案(Final Draft International Standard)。这暗示了我所使用的某些语言特性可能并不在你的编译器(s) 支援能力之列。别担心,我认为对你而言唯一所谓「新」特性,应该只有templates,而templates 如今几乎已是各家编译器的必备机能。我也运用exceptions,并大量集中於条款9~15。如果你的编译器(s) 未能支援exceptions,没什么大不了,这并不影响本书其他部份带给你的好处。但是,听我说,纵使你不需用到exceptions,亦应阅读条款9~15,因为那些条款(及其相关篇幅)检验了某些不论什么场合下你都应该了解的主题。 我承认,就算标准委员会授意某一语言特性或是赞同某一实务作法,并非就保证该语言特性已出现在目前的编译器上,或该实务作法已可应用於既有的开发环境上。一旦面对「标准委员会所议之理论」和「真正能够有效运作之实务」间的矛盾,我便两者都加以讨论,虽然我其实比较更重视实务。由於两者我都讨论,所以当你的编译器(s) 和C++ 标准不一致时,本书可以协助你,告诉你如何使用目前既有的架构来模拟编译器(s) 尚未支援的语言特性。而当你决定将一些原本绕道而行的解决办法以新支援的语言特性取代时,本书亦可引导你。 注意当我说到编译器(s) 时,我使用复数。不同的编译器对C++ 标准的满足程度各不相同,所以我鼓励你在至少两种编译器(s) 平台上发展程式码。这么做可以帮助你避免不经意地依赖某个编译器专属的语言延伸性质,或是误用某个编译器对标准规格的错误阐示。这也可以帮助你避免使用过度先进的编译器技术,例如独家厂商才做得出的某种语言新特性。如此特性往往实作不够精良(臭虫多,要不就是表现迟缓,或是两者兼具),而且C++ 社群往往对这些特性缺乏使用经验,无法给你应用上的忠告。雷霆万钧之势固然令人兴奋,但当你的目标是要产出可靠的码,恐怕还是步步为营(并且能够与人合作)得好。 本书用了两个你可能不甚熟悉的C++ 性质,它们都是晚近才加入C++ 标准之中。某些编译器支援它们,但如果你的编译器不支援,你可轻易以你所熟悉的其他性质来模拟它们。 第一个性质是型别bool,其值必为关键字true 或false。如果你的编译器尚未支援bool,有两个方法可以模拟它。第一个方法是使用一个global enum:enum bool { false, true }; 这允许你将参数为bool 或int 的不同函式加以多载化(overloading)。缺点是,内建的「比较运算子(comparison operators)」如==, <, >=, 等等仍旧传回ints。
- 粉丝: 0
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助