C++编程:99个常见错误与避坑指南

需积分: 18 13 下载量 98 浏览量 更新于2024-07-28 1 收藏 10.44MB PDF 举报
"C++99个常见错误.pdf" 在C++编程中,错误和陷阱是开发者经常遇到的问题,这本书《C++99个常见错误》由Stephen C. Dewhurst撰写,旨在帮助程序员避免编码和设计过程中的常见问题。文档包含了多个章节,详细列举并解释了99个常见的错误,涵盖了基础问题、语法问题以及预处理器问题等多个方面。 1. **基础问题** - **错误1:过分积极的注释**:过度注释可能会导致代码阅读困难,因为它们可能过时或冗余,应注重编写清晰易懂的代码。 - **错误2:幻数**:直接使用未声明的数字常量(如3,7等)可能导致代码难以理解,应使用常量或枚举来命名它们。 - **错误3:全局变量**:全局变量可能导致意外的副作用和难以调试的代码,尽量减少其使用。 - **错误4:未能区分函数重载和形式引数默认值**:这两者可能会混淆,要确保正确理解和使用。 - **错误5:对引用的认识误区**:引用不是指针,它在创建时必须初始化且不可改变。 - **错误6:对常量(性)的认识误区**:了解const的使用规则,包括const对象、const成员函数和const引用。 - **错误7:无视基础语言的精妙之处**:C++有丰富的特性,如模板、异常处理和RAII,应充分利用。 - **错误8:未能区分可访问性和可见性**:访问控制与作用域不同,理解两者间的区别很重要。 - **错误9:使用糟糕的语言**:避免使用C++的遗留特性,如原始指针操作,除非必要。 - **错误10:无视(久经考验的)习惯用法**:遵循最佳实践,如使用智能指针代替裸指针。 - **错误11:聪明反被聪明误**:过于复杂的解决方案可能导致维护难题。 - **错误12:嘴上无毛,办事不牢**:缺乏经验可能导致简单的错误,持续学习和实践是关键。 2. **语法问题** - **错误13:数组定义和值初始化的语法形式混淆**:正确理解数组声明和初始化的区别。 - **错误14:捉摸不定的评估求值次序**:C++不保证操作符的顺序,应使用括号明确指定。 - **错误15:运算符优先级问题**:熟悉运算符优先级以避免混淆。 - **错误16:for语句引发的理解障碍**:确保清楚for循环的工作方式,尤其是初始化、条件和更新部分。 - **错误17:取大优先解析原则带来的问题**:注意解析规则可能导致的意外解析。 - **错误18:声明饰词次序的小聪明**:理解声明的顺序规则,例如const和volatile的位置。 - **错误19:“函数还是对象”的多义性**:注意名称冲突,特别是与类型和操作符函数相关的情况。 - **错误20:效果漂移的型别量化饰词**:泛型编程中,类型参数化可能导致预期之外的行为。 - **错误21:自反初始化**:理解自反类型转换的后果,如int(int&)。 - **错误22:静态连接型别和外部连接型别**:明白静态和动态链接的区别,尤其是在库之间。 - **错误23:运算符函数名字查找的反常行为**:了解运算符重载的查找规则。 - **错误24:晦涩难懂的operator->**:正确实现和使用自定义的箭头操作符。 3. **预处理器问题** - **错误25:使用#define定义的字面量**:避免使用#define定义常量,使用const或者constexpr。 - **错误26:使用#define定义的伪函数(函数宏)**:尽量使用inline函数或模板,以避免宏定义的副作用。 - **错误27:#if的滥用**:谨慎使用预处理器条件编译,避免产生条件死区。 - **错误28:断言(assert)的误用**:assert用于调试,不应在生产环境中依赖它。 这本书通过这些具体的错误示例,旨在提高C++程序员的代码质量和可维护性,是提升编程技能和避免常见陷阱的重要参考资料。