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