C++批判:编程语言的趋势与问题分析

需积分: 0 1 下载量 89 浏览量 更新于2024-10-18 收藏 352KB PDF 举报
"C++批判(第三版)" 是一本由Ian Joyner编写的关于C++编程语言的批评性分析书籍,旨在探讨C++语言的设计、使用及其在1990年代编程语言趋势中的地位。书中的观点是作者个人的,并不代表其雇主的立场。 在介绍部分,作者强调了编程语言的角色,指出编程不仅是编写指令,更是一种沟通工具,能够实现抽象和精确表达。编程语言的符号系统(notation)和工具集成对开发者效率至关重要,同时正确性(correctness)和类型系统(types)是保证代码质量的基础。冗余检查和封装(encapsulation)有助于减少错误,增强安全性,并考虑到礼貌和安全的编程实践。实施和部署的考量也是编程语言设计时不容忽视的方面。 针对C++本身,作者提出了多方面的批评: 1. 虚函数(virtual functions):可能导致运行时开销,且可能导致设计上的复杂性。 2. 全局分析(global analysis):C++的全局性可能导致难以进行静态分析和优化。 3. 类型安全链接(type-safe linkage):C++的链接机制可能存在类型安全问题。 4. 函数重载(function overloading):可能造成混淆,特别是在命名约定不一致时。 5. 继承的本质(nature of inheritance):C++的继承模型可能引发设计问题。 6. 多继承(multiple inheritance):可能导致钻石问题和复杂性增加。 7. 虚类(virtual classes):增加了理解和使用的复杂性。 8. 模板(templates):虽然提供了泛型编程,但可能导致编译器生成大量代码。 9. 名称重载(name overloading):可能引起混淆和命名冲突。 10. 内嵌类(nested classes):可能影响封装性和代码组织。 11. 全局环境(global environments):全局变量可能导致意外的依赖和副作用。 12. 多态和继承(polymorphism and inheritance):C++的实现方式可能引入复杂性和潜在问题。 13. 类型转换(typecasts):C++的显式类型转换可能存在不安全因素。 14. 运行时类型识别(RTTI)和类型转换:RTTI增加了运行时开销,而新的类型转换可能导致不一致。 15. Java与类型转换:比较了C++和Java在类型转换上的差异。 16. '.' 和 '->' 运算符:在对象访问上可能引发混淆。 17. 类定义中的匿名参数(anonymous parameters in class definitions):可能降低代码的可读性。 18. 无名构造函数(nameless constructors):可能使类的行为变得不可预测。 本书通过对C++的深入剖析,提醒读者在使用C++时需要注意的问题,并对如何改进编程实践提出见解,是一本帮助开发者理解和批判性思考C++语言的宝贵资料。