C++批判:1990年代编程语言趋势分析

需积分: 0 2 下载量 26 浏览量 更新于2024-11-28 收藏 352KB PDF 举报
"C++批判(第三版)是Ian Joyner撰写的一本针对C++编程语言的分析和批评的书籍,该书对C++的设计、语言趋势以及与其他编程语言的对比进行了深入探讨。这本书并不是学术论文,但涉及了继承等技术性问题,适合对C++有了解或正在考虑采用C++的读者,特别是决策者。" 在本书中,作者从多个方面讨论了编程语言的角色及其重要性: 1. **编程**:编程不仅仅是编写代码,而是构建能够解决特定问题的软件系统。 2. **沟通、抽象和精确性**:编程语言是开发者之间交流思想的工具,好的语言应该支持高效地表达抽象概念并保持语义的精确性。 3. **符号表示**:语言的符号和语法应当清晰、直观,便于阅读和理解。 4. **工具集成**:现代编程语言需要与版本控制、调试器、编译器等工具无缝集成,以提高开发效率。 5. **正确性**:语言应支持编写出正确无误的代码,并提供错误检测机制。 6. **类型系统**:类型系统在确保程序安全性和性能方面扮演关键角色,C++的静态类型系统在一定程度上能防止类型错误。 7. **冗余和检查**:避免冗余代码,同时提供足够的检查机制来发现潜在问题。 8. **封装**:封装是面向对象编程的核心,它保护数据不受意外修改。 9. **安全性与礼貌**:编程语言应考虑内存安全和使用者友好,如防止缓冲区溢出等。 10. **实现与部署**:编程语言的设计应考虑其在不同环境下的实现和部署难度。 11. **结论**:这些因素综合起来影响了语言的选用和项目成功。 接着,Joyner对C++的一些特定特性提出了批评: 1. **虚函数**:虽然虚函数提供了多态性,但也可能导致运行时开销和难以理解和调试的问题。 2. **全局分析**:全局变量和作用域可能导致复杂性,影响代码的可维护性。 3. **类型安全链接**:C++的类型系统在某些情况下可能不够严格,导致类型安全问题。 4. **函数重载**:虽然可以增加灵活性,但也可能引起混淆,特别是当重载函数的行为差异不明显时。 5. **继承的本质**:C++的继承机制可能导致复杂性,尤其是单继承和多继承的问题。 6. **多重继承**:多重继承可以带来代码复用的优势,但也可能导致歧义和“菱形问题”。 7. **虚拟类**:虚拟基类在多继承中的使用增加了复杂度。 8. **模板**:模板提供了泛型编程,但也可能导致编译器生成大量代码,增加编译时间和库大小。 9. **名称重载**:名称重载可读性不强,可能引发混淆。 10. **嵌套类**:虽然可以封装相关数据,但可能导致命名冲突和编译复杂性。 11. **全局环境**:全局变量和命名空间的管理是C++中的一个挑战。 12. **多态性和继承**:C++的多态性和继承结合可能导致设计上的困难。 13. **类型转换**:C++的类型转换(包括C-style转换和C++特有的转换)可能导致不安全的代码。 14. **运行时类型信息(RTTI)和类型转换**:RTTI增加了运行时的开销,而类型转换可能导致隐含的类型转换风险。 15. **新的类型转换**:C++标准库引入了新的类型转换方式,如`static_cast`、`dynamic_cast`等,以增强安全性。 16. **Java与类型转换**:Joyner还比较了Java的类型转换机制,指出其相比C++的一些优势和不足。 17. **'.'和'->'**:成员访问操作符在指针和对象之间的差异可能造成混淆。 18. **匿名参数**:类定义中的匿名参数可能降低代码的可读性。 19. **无名构造函数**:无名构造函数可能导致意外的初始化行为。 《C++批判(第三版)》通过详细分析C++的优缺点,帮助读者更好地理解C++的复杂性和潜在问题,并与其他编程语言进行比较,为选择合适的编程工具提供了有价值的观点。