1.静态生存期——某个对象它的生存期与程序的运行期相同,就是说在程序运行期间它都不会释放。(使用关键字static修饰对象)
2.动态生存期——常见的全局变量与局部变量
例如:
#include <iostream>
using namespace std;
int a=1; // a为全局变量,它具有静态生存期。
void fun(void);
int main()
{
static int x; // 局部变量,具有静态生存期,可以叫做静态局部变量,局部可见。
int y=5; // y,z为局部变量,具有动态生存期。
int z=1;
cout<<"---MAIN---\n";
cout<<" a: "<<a<<" x: "<<x<<" y: "<<y<<" z: "<<z<<endl;
z=z+2;
fun();
cout<<"---MAIN---\n";
cout<<" a: "<<a<<" x: "<<x<<" y: "<<y<<" z: "<<z<<endl;
a=a+10;
fun();
return 0;
}
void fun(void)
{
// x,y为静态局部变量,具有全局寿命,局部可见。只有第一次进入函数时被初始化。
static int x=4;
static int y;
int z=10; // z为局部变量,具有动态生存期,每次进入函数时都初始化。
a=a+20;
x=x+3;
z=z+4;
cout<<"---FUN---\n";
cout<<" a: "<<a<<" x: "<<x<<" y: "<<y<<" z: "<<z<<endl;
y=x;
}
输出结果为:---MAIN---
a:1 x:0 y:5 z:1
---FUN---
a:21 x:7 y:0 z:14
---MAIN---
a:21 x:0 y:5 z:3
---FUN---
a:51 x:10 y:7 z:14
注:静态局部变量如果没有进行显式初始化,则它将被默认初始化为0。当第二次进入fun函数时,其静态局部变量x和y将不再初始化,x和y将继续使用fun函数第一次被调用后最后的值来参加下面的运算。具体点说,第一次调用完fun函数后,fun中变量x的值是7,y=x=7,在第二次调用fun函数时,x不会被赋值为4,而是继续使用7作为自己的值。