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;