C++中变量的自动存储持续性的介绍
在默认情况下,在函数中声明的函数参数和变量的存储持续性为自动,作用域为局部,没有链接性。也就是说,如果在main()中声明了一个名为 texas 的变量,并在函数 oi()中也声明了一个名为 texas 变量,则创建了两个独立的变量–只有在定义它们的函数中才能使用它们。对 oi()中的texas执行的任何操作都不会影响 main()中的texas,反之亦然。另外,当程序开始执行这些变量所属的代码块时,将为其分配内存;当函数结束时,这些变量都将消失(注意,执行到代码块时,将为变量分配内存,但其作用域的起点为其声明位置)。
如果在代码块中定义了变量,则该变量的存在时间和作用域将被限制在该代码块内。例如,假设在main()的开头定义了一个名为 teledeli 的变量,然后在 main( )中开始一个新的代码块,并其中定义了一个新的变量 websight,则 teledeli 在内部代码块和外部代码块中都是可见的,而 websight 就只在内部代码块中可见,它的作用域是从定义它的位置到该代码块的结尾:
int main()
{
int teledeli = 5;
{ //websight allocated
cout << "Hello\n";
int websight = -2; //websiqht scope begins
cout << websight << ' ' << teledeli << endl;
}
cout << teledeli << endl;
...
} //teledeli expires
然而,如果将内部代码块中的变量命名为teledeli,参见【0voice C++】而不是 websight,使得有两个同名的变量(一个位于外部代码块中,另一个位于内部代码块中),情况将如何呢?
在这种情况下,程序执行内部代码块中的语句时,将 teledeli 解释为局部代码块变量。我们说,新的定义隐藏了(hide)以前的定义,新定义可见,旧定义暂时不可见。在程序离开该代码块时,原来的定义又重新可见。