在 C/C++ 中,static 關鍵字使用恰當能夠大大提高程序的模塊化特性。
static 在 C++ 類之中和在類之外的作用不一樣,在C語言中的作用和在 C++ 類之外的作用相同,下面一一說明:
在類外的作用
1.變量
局部變量
局部變量即是在函數或一個代碼塊內部聲明的變量。
當局部變量被定義時,系統不會對其初始化;
作用域為函數或一個代碼塊;
局部變量儲存在棧里,離開作用域就會無效。
在局部變量前面加上關鍵字 static,該變量變為靜態局部變量。
變量在定義時,必須初始化,如果沒有初始化,系統會自動對其初始化,如 int 型初始化為 0;
儲存在全局變量區,一直存在直到程序運行結束。
靜態局部變量相當於一個全局變量!!!
全局變量
全局變量是在函數體外部聲明的變量。
在全局變量區分配存儲空間,且編譯器會自動對其初始化;
作用域為整個程序,即包括所用的源文件和頭文件;
其他文件可以使用extern外部聲明后直接使用,其他文件不能定義相同的變量。
同樣,在全局變量前面加上關鍵字 static,該變量變為靜態全局變量。
只能在本文件中訪問,不能在其它文件中訪問,即便是extern外部聲明也不可以;
作用域只在本文件;
其他文件可以定義與其同名的變量,兩者互不影響。
2.函數
函數就是完成特定任務的獨立程序代碼單元。
static 在函數的使用方法是在函數的返回類型前面加上 static。其作用與全局變量類似。
靜態函數只在聲明它的文件中可見,其他文件不能引用該函數;
其他文件可以定義與其同名的變量,兩者互不影響;
在類中的作用
一個類包含 數據成員 和 成員函數;
數據成員
在數據成員前加上 static 關鍵字,聲明靜態數據成員。
靜態數據成員存儲在全局變量區,靜態數據成員在定義時分配存儲空間;
在使用之前必須初始化,它的初始化在main()之前;
靜態數據成員不屬於任何對象。即使不定義類的任何對象它們也存在,在整個程序中只有一個,而且所有對象都可以對它進行操作;
與靜態全局變量相比,靜態數據成員變量不與程序中的其他全局變量沖突。
成員函數
在成員函數前加上 static 關鍵字,聲明靜態成員函數。其作用與靜態數據成員類似。
靜態成員函數不屬於任何對象。調用時,它們無 this 指針,任何對象都可以調用;
靜態成員函數不能為 virtual、const 或 volatile;
靜態成員函數的地址可以存儲在常規的函數指針中,但不能存儲於成員函數指針中;
總結
這是我寫的第一篇,有很多不足之處,但寫下去就一定有進步。
static這個關鍵字很有用,可以盡量將只在本文件使用的全局變量和函數使用 static 關鍵字聲明,同樣,如果類中有一個數據成員對於所有對象來說,如球都是圓的等等,盡量使用 static 聲明。