1.自动存储持续性(经典情况,不同作用域同名参数的“覆盖”)
在默认情况下,在函数中声明的函数参数和变量的存储持续性为自动,作用域为局部,没有链接性。在程序执行其所属代码时被创建,在执行完函数或者代码块时,它们使用的内存被释放。
#include <iostream>
using namespace std;
int main()
{
int value = 1;//作用域为整个main函数
cout << "花括号外value= " << value << " &value= " << &value << endl;
{
int value = 333; //作用域仅为花括号内部
cout << "花括号内value= " << value << " &value= " << &value << endl;
}
cout << "花括号外value= " << value << " &value= " << &value << endl;
cin.get();
return 0;
}
C++ primer plus的解释是程序在执行内部代码块中的语句时,将value解释为局部代码块变量。我们说新的定义隐藏了以前的定义,新定义可见,旧定义暂时不可见。在程序离开该代码块时,原来的定义又可见。
程序中第一个cout语句输出作用域为main函数的value及其地址,第二行cout输出代码块中的value,此时代码块中的value暂时隐藏了main中的value,它们不是同一个变量,在value=333代码块结束后,main中的value又重新可见