首先,C++是C的超集,所以static在C中的用法 對於C++來說是全盤接受的,而兩者的不同也就是C++中多出來的特性,而這些多出來的特性與C++面向對象的特性有關,或更具體的說,就是static在“類”中的意義和作用。
1:C語言中的Static使用:
1.1 C中static變量 的影響其實不在作用域而在於 其“存儲方式”:
即在函數內定義的static變量,其作用域仍然在函數內;在函數外定義的static變量,其作用域也在函數外,屬於變量所在的文件的作用域。
static 的靜態存儲方式使得:同一函數的所有static變量的“副本”都共用一個該變量。所以使用了static變量的函數一般是“不可再入”的,不是“線程安全”的。
1.2 C中static函數 的作用:
C中static函數還有另外一個名字,叫:內部函數。從名字也可看出,C中的static函數的定義將函數“局部化”,使其訪問權限被限制在當前文件內部,這實際上說明的是一種“代碼的隱藏機制”,通過和extern函數(外部函數)的聯合使用,可以實現C語言中函數的模塊化設計,這有點類似與C++ 中的Public和private關鍵字的味道。 當然,如果在C中,函數默認的訪問權限是extern的,所以關鍵字extern往往省略不寫。
2: C++類中定義的Static變量和函數
其實本質上與C中的情況一致,不在於作用域(還是類的作用域),而在於其“存儲方式”決定了Static變量將與類存儲在一起(因爲類本身在內存中有其原型的內存空間),而類的實例將共享這一static變量,所以static變量也不是“線程安全”的。
而static成員函數的設置,主要是爲了訪問靜態變量,或者完成某些獨立於類實例的功能。