在条件中的声明
为了避免意外地错误使用变量,在最小的作用域里引进变量是一个很好的想法。特别地,最好是把局部变量的定义一直推迟到可以给它初始值时再去做。采用这种方式,就不会出现因为使用未初始化的变量而造成的麻烦了。
这两条原则的一个最优雅的应用就是在条件中声明变量。考虑
if(double d = prim(true)) {
left /= d;
break;
}
在这里,d被声明和初始化,初始化后的d值又被作为条件的值。d的作用域从它的声明点一直延伸到这个条件所控制的语句的结束。例如,如果这个if语句有else分之,在这两个分支里,d都处于作用域之中。
另一种最明显的传统方式是在条件之前声明d。但是这就打开了使用d的作用域:在其初始化之前,以及在预想中它有价值的生存阶段之后:
double d;
// ...
d2 = d; // 呜呼!
// ...
if(d = prim(true)) {
left /= d;
break;
}
// ...
d = 2.0; // d的两个不相关的使用
在条件中声明变量,除了逻辑方面的优点之外,还能产生出更紧凑的源代码。
在条件中的声明只能声明和初始化单个的变量或者const。
🔚