static 這個修飾詞的意思,是爲 靜態;在工作所用到的C工程中,時常看到其使用,但一直沒有太深的認識,最近在看了C++語言描述後,其中對與class類的成員定義中,有個更詳細的static修飾用法,使得我對static的認識比之之前更多了些。
在我的c文件中,我在一開始認爲:對於全局變量才用static來修飾,以便對於其進行固定,不會隨意變動;後來在對函數調用時,我也時不時的使用它來修飾,完全是照搬已有的函數定義寫法來定義的,於是,經常在我在其他文件調用該函數時,編譯總會有錯誤,說找不到相關函數,即便我已經在本文件開頭進行extern聲明,而有的時候則完全不行,完全不知道爲什麼。在後來,對於新定義的函數,都基本不用static進行修飾,只對變量進行修飾,這樣一來,似乎錯誤少了很多,也就不了了之了。
最近在進行C++學習中,有一章節有介紹static,主要是用在class上。它說,定義了一個static變量,對於這整個類來說,是唯一的,不是沒創建一次對象,就有一個static變量,舉個例子來說:
class Z{
public:
void f(){
static int s=0;
int a=2;
cout<<++s<<'\n'<<a<<'\n';
}
};
int main(){
Z z1,z2;
z1.f(); // ——>1,2
z2.f(); // ——>2,2
z1.f(); // ——>3,2
return 0;
}
在這裏,a是局部變量,對於每個Z類的對象,a有屬於它自己的值;然而對於static修飾的s,則是大家公用,一次調用就一次增加。
同樣的,這讓我聯想到我之前在C文件中對static的用法,有了一個更加清晰的認識,對於一個用static修飾的變量/函數來說,它只能在本文件中進行使用,若是在其他文件進行調用時,則應該把這個修飾去掉,免得限定了這個函數/變量的使用範圍,一直對“靜態的”難以理解,現在總算是有了一個方面的理解吧。