C++批判:1990年代编程语言趋势分析
需积分: 0 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++的复杂性和潜在问题,并与其他编程语言进行比较,为选择合适的编程工具提供了有价值的观点。
2019-03-27 上传
2018-12-03 上传
1701 浏览量
2015-09-30 上传
tubotom
- 粉丝: 2
- 资源: 5
最新资源
- Raspberry Pi OpenCL驱动程序安装与QEMU仿真指南
- Apache RocketMQ Go客户端:全面支持与消息处理功能
- WStage平台:无线传感器网络阶段数据交互技术
- 基于Java SpringBoot和微信小程序的ssm智能仓储系统开发
- CorrectMe项目:自动更正与建议API的开发与应用
- IdeaBiz请求处理程序JAVA:自动化API调用与令牌管理
- 墨西哥面包店研讨会:介绍关键业绩指标(KPI)与评估标准
- 2014年Android音乐播放器源码学习分享
- CleverRecyclerView扩展库:滑动效果与特性增强
- 利用Python和SURF特征识别斑点猫图像
- Wurpr开源PHP MySQL包装器:安全易用且高效
- Scratch少儿编程:Kanon妹系闹钟音效素材包
- 食品分享社交应用的开发教程与功能介绍
- Cookies by lfj.io: 浏览数据智能管理与同步工具
- 掌握SSH框架与SpringMVC Hibernate集成教程
- C语言实现FFT算法及互相关性能优化指南