文件名称:变量使用时才声明并初始化-*重构*改善既有代码的设计(带完整书签)
文件大小:1.28MB
文件格式:PDF
更新时间:2024-06-27 17:56:06
C++ 编程规范
建议2.1 变量使用时才声明并初始化 说明:变量在使用前未赋初值,是常见的低级编程错误。使用前才声明变量并同时初始化,非常方便 地避免了此类低级错误。 在函数开始位置声明所有变量,后面才使用变量,作用域覆盖整个函数实现,容易导致如下问题: 程序难以理解和维护:变量的定义与使用分离。 变量难以合理初始化:在函数开始时,经常没有足够的信息进行变量初始化,往往用某个默认的 空值(比如零)来初始化,这通常是一种浪费,如果变量在被赋于有效值以前使用,还会导致错误。 遵循变量作用域最小化原则与就近声明原则, 使得代码更容易阅读,方便了解变量的类型和初始值。 特别是,应使用初始化的方式替代声明再赋值。 示例: //不好的例子:声明与初始化分离 string name; //声明时未初始化:调用缺省构造函数 //……. name=”zhangsan”; //再次调用赋值操作符函数;声明与定义在不同的地方,理解相对困难 //好的例子:声明与初始化一体,理解相对容易 string name(”zhangsan”); //调用一次构造函数 建议2.2 避免构造函数做复杂的初始化,可以使用“init”函数 说明:正如函数的变量都在函数内部初始化一样,类数据成员最好的初始化场所就是构造函数,数据 成员都应该尽量在构造函数中初始化。 以下情况可以使用init()函数来初始化: 需要提供初始化返回信息。 数据成员初始化可能抛异常。 数据成员初始化失败会造成该类对象初始化失败,引起不确定状态。 数据成员初始化依赖this指针:构造函数没结束,对象就没有构造出来,构造函数内不能使用this 成员; 数据成员初始化需要调用虚函数。在构造函数和析构函数中调用虚函数,会导致未定义的行为。 示例:数据成员初始化可能抛异常: class CPPRule {