和自然办的事物一样,程序中的变量和对象等也有生存期,从产生到消亡。
生存期主要有两种,静态和动态。
1、静态生存期
某个对象的生存时间和程序运行期相同,我们就说它具有静态生存期。
很明显文件域的对象具有静态生存期。
使用块作用域具有静态生存期的方法,加static关键字修饰。
2、动态生存期
除开上面的静态生存期,其余对象具有动态生存期。具有动态生存期的对象产生于声明处,于对象作用域处结束。
<pre name="code" class="cpp">#include<iostream>
using namespace std;
int a=1; //全局变量,静态生存期
void fun();
int main()
{
static int x; //静态生存期,局部可见性,默认初始化为0
int y=10;
cout<<"main:"<<endl;
cout<<"a:"<<a<<" "<<"x:"<<x<<" "<<"y:"<<y<<endl;
a=a+1;
fun();
x=x+1;
cout<<"main:"<<endl;
cout<<"a:"<<a<<" "<<"x:"<<x<<" "<<"y:"<<y<<endl;
fun();
return 0;
}
void fun()
{
static int x=2; //静态生存期,局部可见性,与主函数中的x无关
//x只在第一次进入函数时初始化,之后就延用最后调用的值
int y=3; //动态生存期 每次都初始化
y=y+3;
a=a+2;
x=x+10;
cout<<"fun:"<<endl;
cout<<"a:"<<a<<" "<<"x:"<<x<<" "<<"y:"<<y<<endl;
}
main:
a:1 x:0 y:10 //a一直在变化,经main和fun累加
fun:
a:4 x:12 y:6
main:
a:4 x:1 y:10 //主函数x随主函数运算变化
fun:
a:6 x:22 y:6 //fun函数x二次累加基于fun第一次的12 具有静态生存期和局部可见性 y值重新赋值计算