在条件中的声明

  为了避免意外地错误使用变量,在最小的作用域里引进变量是一个很好的想法。特别地,最好是把局部变量的定义一直推迟到可以给它初始值时再去做。采用这种方式,就不会出现因为使用未初始化的变量而造成的麻烦了。

  这两条原则的一个最优雅的应用就是在条件中声明变量。考虑

    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。

🔚