声明作为语句

  一个声明也是一个语句。除非一个变量被声明为static,否则它的初始式的执行就将在控制线程经过这个声明的时候进行(10.4.8节)。允许在所有写语句的地方(以及几处其他地方;6.3.2.1节、6.3.3.1节)写声明,是为了使程序员能够最大限度地减少由于未初始化的变量而导致的错误,并使代码得到更好的局部化。很少有某种理由说,必须在还没有某变量应该保存的值之前引进这个变量。例如,

    void f(vector<string>& v, int i, const char* p)
    {
        if(p == 0) return;
        if(i < 0 || v.size() <= i) error("bad index");
        string s = v[i];
        if(s == p) {
            // ...
        }
        // ...
    }

能将变量放在可执行的代码之后,对于写许多常量以及程序设计的单赋值风格(其中对象的值在初始化之后就不再改变)都是最基本的。对于用户定义类型而言,将变量的定义推迟到适当的初始式已经可以使用之时,还可以导致更好的执行性能。例如,

    string s; /* ... */ s = "The best is the enemy of the good.";

很容易比下面的语句慢得多

    string s = "Voltaire";

也有一些情况中需要声明一个没有初始式的变量,最常见的就是需要用语句去初始化它。这方面的例子如输入用的变量和数组等。

🔚