static關鍵字修飾的函式和全域性變數只會在本檔案可見,對外不可見。即其他檔案無法訪問本檔案定義的函式,用extern無法獲取到變數和函式的定義。通過用static修飾函式,我們可以在不同的檔案定義多個同名的函式。
static修飾的區域性變數的記憶體不會開闢在棧上,而是開闢在靜態變數區。即和全域性變數乙個區域,只有程式結束時,記憶體才會釋放。當靜態區域性變數被宣告定義之後,其之後不管呼叫多少次函式,其都不會重新定義和初始化。
#include using namespace std;
void foo()
int main()
上述**會輸出10和11兩個結果。我們多次呼叫了foo函式,但是靜態區域性變數count的值卻並沒有變。同時,這也適用於多個執行緒呼叫該函式,可用於執行緒之間的通訊。
被static修飾類的成員變數會被分配到靜態變數區,不管類被建立多少個物件,所有物件的靜態成員變數都會被指向同乙個位址。同時當訪問限制允許時(被public修飾),我們可以直接通過 類名::靜態成員變數名 這種形式來進行變數訪問。
類的成員變數和成員函式其實都有乙個this指標指向,當呼叫類的成員函式foo()時,其實是呼叫了this->foo()。static修飾的靜態成員函式不為特定的物件所有,而是類所有。所以,並不具備thsi指標。因此,靜態成員函式無法訪問其他成員變數和成員函式,只能訪問靜態成員變數和其他靜態成員函式。因為沒有了this指標,所以呼叫速度也會有所提高。
靜態成員函式除了通過物件使用.或者->符號來訪問之外,還可以通過 類名::靜態成員函式名 來進行靜態成員函式的訪問。
C C 中static關鍵字的用法
一 c語言中static關鍵字的用法主要體現在三個方面 對全域性變數 區域性變數 函式 1 全域性變數 static修飾全域性變數,會改變全域性變數的作用域 static修飾全域性變數的時候,這個全域性變數只能在本檔案中訪問,不能在其它檔案中訪問,即便是extern外部宣告也不可以 2 區域性變數 ...
C C 語言 static關鍵字的用法
c c 中static關鍵字可以從以下三個方面理解 static int a 本質意義為static修飾的變數被分配在靜態儲存區,不是在棧上,也不是在堆上。所以有以下應用場景。1,c語言中,會在初次執行的時候進行初始化,整個程式執行期間都不釋放。如果變數為c 類物件,則在main 之前執行建構函式,...
C C 中的static關鍵字
關鍵字extern和static用來說明具有靜態儲存期的變數和函式。用static宣告的區域性變數只能被定義該變數的函式所識別,但是不同於自動變數的是,static變數在其函式被呼叫退出後,仍保留其值。下次函式被呼叫時,可以訪問最近一次被修改後的值。static變數的宣告方法如下 static in...