關鍵字static在C和C++中的區別

首先,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成員函數的設置,主要是爲了訪問靜態變量,或者完成某些獨立於類實例的功能。

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