首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

摘要

避免作用域膨胀,对于需求如此,对于变量也是如此。变量将引入状态,而我们应该尽可能少地处理状态,变量的生存期也是越短越好。这是第10条的一个特例,但值得单独阐述。

讨论

变量的生存期超过必需的长度时会产生以下几个缺点:

l     它们会使程序更难以理解和维护:例如,如果代码只改变当前驱动器,那么它是否应该将作用域更新为模块范围的path字符串?

l     它们的名字会污染上下文:这一点的直接后果,就是可见性最好的名字空间级变量,问题也最大(见第10条)。

l     它们不能总是被合理地初始化:在能够合理地初始化一个变量之前,决不要声明它。未初始化的变量是所有CC++程序中普遍的错误来源。我们需要对此高度重视,因为编译器并不总能将其检查出来(见第19条)。

要特别说明的是,C99之前的C语言版本曾要求只能在作用域开始处定义变量;这种方式在C++中已经过时了。这一限制的严重问题在于,在作用域的开始,经常还没有足够的相关信息进行变量初始化。因此我们只有两种选择——要么用某个默认的空值(比如零)来初始化,这通常都是一种浪费,而且如果变量在拥有有效状态之前被使用,还会导致错误;要么让变量保持未初始化,而这是很危险的。用户定义类型的未初始化变量将会自行初始化为某个空值。

解决方案很简单:尽可能局部地定义每个变量,通常就是在你有了足够的数据进行初始化的时候,而且恰恰就在首次使用变量之前。

例外情况

有时候将变量提出循环是有好处的(见第9条)。

因为常量并不添加状态,所以本条对常量不适用(见第17条)。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论