C 中static關鍵字的用法

2021-06-29 05:58:37 字數 1420 閱讀 3236

static變數與全域性變數有很多相似之處,下面是他們主要的異同點:

相同:1)都儲存在靜態儲存區,相比之下區域性變數是儲存在程式棧中的。

2)生命週期與程式的生命週期相同,從初始化直到程式執行結束一直存在。而區域性變數的使用週期只在它的定義域中(即所在的{}內)。

不同:全域性變數的作用域就是全域性,而靜態成員的作用域有「區域性性」,即穩健的作用域。

穩健的作用域是最難理解的地方,其實就是static變數同時具有全域性變數和區域性變數的性質。與全域性變數相同的地方是生命週期,而與區域性變數相同的是作用域。在乙個函式內部定義的static變數在第一次定義的時候即存在,不會因為函式呼叫完畢而被銷毀,下次呼叫該函式時該static變數已經存在,會跳過定義static變數的語句。static全域性變數只能作用於定義它的檔案裡,不能作用到其他檔案裡。一般的全域性變數可以使用extern關鍵字進行引用。

在類中定義的static成員變數和成員函式也具有一些獨特的性質,在下面的程式裡展現。

/**

這個工程主要實現一些static的使用方法

*/#include using namespace std;

/**在第一次呼叫fun函式時,value被定義,應為static物件只能被定義一次,

所以之後使用該函式時,會「跳過」定義static物件的語句!*/

void fun1(int i)

void fun2(int i)

static int global_a = 0;

static void fun3()

/**sv只在第一次呼叫時被定義,之後呼叫改函式將掉過呼叫語句,

cv在每次呼叫時都被重新定義。*/

void fun4(int i)

class a

void fun2()

private:

int i = 0;

//static int j = 0; 錯誤,不能在類的內部定義靜態成員!

static int j; //在類內只能宣告靜態成員!

};//在類外對靜態成員進行定義,其目的是防止類的多個例項對static的重複定義!

int a::pub = 0;

int a::j = 0;

int main()

總之,理解static就是要理解它所定義的變數或函式的生命週期和作用範圍(全域性+區域性)!

update: 2015-03-25,最近了解了乙個static的新用法,就是在類內可以定義該類的static例項,而定義一般的該類的例項是不可以的!有什麼作用呢?就是在主函式中可以不使用該類的例項來呼叫該類的static的成員函式,和使用static&public的成員變數。

update: 2015-03-31,這裡對「該類的static例項」的理解有問題!在最新的部落格「類內的static例項」進行了新的說明!

C 中static關鍵字的用法

c 中的static關鍵字是從c中繼承的。1 在類中的使用static關鍵字宣告的變數和函式不屬於該類的任何乙個具體的物件,而是屬於這個類的所有物件。物件a和b對可以對myclass中的整型變數i進行修改,但是修改的動作是針對物件a和b的。也就是說a.i b.i是true的。例如 class myc...

C 中的static關鍵字用法

c 的static有兩種用法 面向過程程式設計中的static和物件導向程式設計中的static。前者應用於普通變數和函式,不涉及類 後者主要說明static在類中的作用。一 面向過程設計中的static 1 靜態全域性變數 在全域性變數前,加上關鍵字static,該變數就被定義成為乙個靜態全域性變...

C 關鍵字static的用法

1 cpp檔案中的全域性靜態變數 全域性內的宣告 static int a 0 這樣的靜態全域性變數就只能被該cpp檔案所用,不能被其他cpp檔案共享。若不宣告static int a 0 這樣的全部變數既不能保證a能被其他cpp檔案共享,又不能保證不能被其他cpp檔案共享。不建議這樣使用,最好加e...