static可以作用的范围
struct Test{
static int sta_member; // 静态成员变量
static void sta_method(); // 静态成员函数
};
static int sta_global_val; // 静态全局变量
static void StaFunc(); // 静态普通函数
void Demo(){
static int sta_local_val; // 静态局部变量
}
静态成员变量与静态成员函数
成员变量与成员函数:指在一个结构体或者类中所出现的变量和函数。
与之想对应的是非静态成员变量(属性,property)和非静态成员函数(方法,method),与实例有关;而静态成员变量与静态成员函数则是全局统一的。
struct Test{
static int sta_member; // 静态局部变量
static void sta_method(); // 静态局部函数
int member;
int method();
};
// 静态局部变量
void Demo(){
Test a, b;
a.sta_member = 6;
cout << b.sta_member; // 6
cout <<Test::sta_member; // 6
}
// 非静态局部变量
void Demo(){
Test a, b;
a.member = 1;
b.member = 2;
cout << a.sta_member; // 1
cout <<Test::member; // ERR
}
静态全局变量与静态普通函数
静态全局变量与静态普通函数不可以在不同文件见进行链接。
静态局部变量
静态局部变量不存储在栈里面,而在另一个存储区里面,换句话说,静态局部变量的生命周期在第一次初始化时创建,在程序结束时释放。可以看一个例子对比:
void f(){
int a = 0;
static int b = 0;
a++;
b++;
cout << a << "," << b << endl;
}
void Demo(){
f();
f();
f();
}
其输出为:
1,1
1,2
1,3