1、 static局部变量
函数第一次赋值之后,会一直保存这个值,并且只初始化一次
void func()
{
static int i = 0;
i++;
}
2、 static全局变量
未经初始化的全局静态变量将被自动初始化为0,限定作用域为文件内从定义之处开始到文件结尾(非静态全局变量在整个源程序内有效)
static int i; //默认初始化为0
3、 static修饰函数
静态函数与普通函数的区别,只能在声明它的地方可见,不能被其它文件所使用
static void func();
总结:
若全局变量仅在单个文件中可用,则声明为static全局变量,若全局变量仅在单个函数内部可用,则声明为static局部变量。
4、 static成员变量
静态成员可供所有的对象访问,只分配一次内存,也只有一份拷贝,对于每个对象都是一样,它的值可以更新;
静态成员存储在全局数据区,因此不能类声明中定义,初始化规则:<数据类型><类名>::<静态数据成员名>=<值> ,在使用前必须初始化;
- 访问:通过对象或者类名来访问;
5、 static成员函数
与静态成员类似,它是类内部共同享用,和普通成员函数不同,静态成员函数没有this指针;
访问:与静态成员类似通过类名或对象;
非静态成员函数可以任意地访问静态成员函数和静态数据成员,但反过来不行;
静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
class test{
public:
test(){}
~test(){}
public:
//静态成员函数
static int get(){
return m_Count;
}
private:
//静态数据成员
static int m_Count;
};
int test::m_Count = 0;