最近整理了下C和C++中的static關鍵字的用法,和大家分享一下:
在C語言中:
static可以修飾變量(全局變量,局部變量)和方法。
1.static修飾全局變量:
static修飾全局變量的時候,這個全局變量只能在本文件中訪問,不能在其它文件中訪問,即便是extern外部聲明也不可以。
注意:在同一文件中,static 定義的初始化的全局變量無法重複定義,不遵循強符號弱符號的關係。
static修飾全局變量只是改變變量的訪問權限,一般只在本文件中使用的全局變量,都要使用staic修飾,防止與其他文件命名衝突。
2.static修飾局部變量
1.) static修飾局部變量,該局部變量不會被自動釋放,直到程序運行結束才釋放
2.)static修飾的局部變量作用域不會改變,不在局部變量作用域中依然無法調用
3.)static修飾的局部變量初始化默認只會執行一次,未初始化的static局部變量默認值爲0
static修飾局部變量的使用場景一般爲:在函數中分配棧空間,並返回給調用者繼續使用而不被自動釋放。
3.static修飾方法(函數)
static修飾一個函數,則這個函數的只能在本文件中調用,不能被其他文件調用。
static修飾函數的應用和修飾全局變量的作用相似,主要限制該函數只在該文件中使用,防止和其他文件的函數命名衝突。一般只在本文件內部使用的函數,建議都使用static修飾。
在C++中:
C++中除了包含C語言中的用法,還有以下用法:
static修飾類成員變量,static修飾類成員函數。
static修飾類成員變量:
1.) static成員變量可以實現多個對象之間的數據共享。
2.) static成員變量類外存儲,求類的大小時並不包含在內。
3.) static成員變量是屬於類的全局變量,存儲在內存的全局數據區。
4.) static成員使用時必須初始化,且只能在類外進行初始化 。
5.) 可以通過類名訪問static成員變量,也可以通過對象訪問。
6.) 派生類和父類中的static變量共用空間.。
static修飾類成員函數:
1.) 靜態成員函數屬於類的靜態成員,可以通過類名直接調用
2.) 靜態成員函數只能訪問靜態數據成員,但是非靜態成員函數可以訪問靜態數據成員。
3.) 靜態成員函數可以繼承和覆蓋,但無法虛函數