C++學習筆記——對static的重新認識

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修飾的變量/函數來說,它只能在本文件中進行使用,若是在其他文件進行調用時,則應該把這個修飾去掉,免得限定了這個函數/變量的使用範圍,一直對“靜態的”難以理解,現在總算是有了一個方面的理解吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章