存儲類

存儲類是C語言與C++語言的標準中,變數與函式的可訪問性(即作用域範圍scope)與生存期(life time)。存儲類可分為auto、register、static、extern、mutable、thread_local等。

存儲類的分類

存儲類是C語言與C++語言的標準中,變數與函式的可訪問性(即作用域範圍scope)與生存期(life time)。

存儲類可分為auto、register、static、extern、mutable、thread_local等。

auto類

auto類是指定於在{與}所限定的作用域內部的局部變數的預設存儲類。例如:

{

int Count;

auto int Month;

}

上述兩個變數具有相同的存儲類。實際上auto關鍵字一般都省略。

register

register關鍵字提示編譯器把局部變數或函式的形參儘可能放入CPU的暫存器中,以便快速訪問。因此變數的位元組長度不應該超過暫存器的長度。不要用取地址符(&)去獲得此變數的記憶體地址。例如:

{

register int Miles;

}

static

static是全局變數的默認存儲類。例如:

static int Count;

int Road;

main()

{

printf("%d\n", Count);

printf("%d\n", Road);

}

Count與Road兩個變數都是默認的static存儲類。

局部變數也可以具有static存儲類。例如:

void Func(void)

{

static sum=1;

}

實際上,static本意是指變數的值在程式生存期一直可以保持,而且變數需要初始化。全局變數加上static關鍵字,實際上改變的是全局變數的可見性,即僅在本編譯單元(translate unit)內部可見、可訪問,其它編譯單元不可訪問此全局變數。例如,上例中的全局變數count。

extern

extern存儲類是指全局變數可以被各個對象模組訪問。使用extern關鍵字時,表示變數已經在別處定義,所以不能在此處初始化。

mutable

mutable存儲類只能用於類的數據成員,不能用於普通變數。具有mutable性質的類的數據成員打破了類對象的const限定,允許修改類的mutable的數據成員,即便類的其它成員仍然是const唯讀屬性。

thread_local

適用於命名空間內的變數、全局作用域的變數、函式內部定義的靜態變數,如果使用了thread_local關鍵字,則在運行時不同的執行緒具有該變數的不同的存儲位置,即各有各的副本。因此,具有thread_local存儲類的變數,必然具有static存儲類性質,不管是否使用了static關鍵字。

C++2011的新定義的概念

C++2011標準 中,把storage class細分為 存儲持續(storage duration)與 連結性(linkage)兩大屬性。存儲持續期分為靜態存儲持續(static storage duration)、執行緒存儲持續(thread storage duration)、自動存儲持續(automatic storage duration)、動態存儲持續(dynamic storage duration)等總計4種互斥的情形。連結性分為外部連結性(external linkage)與內部連結性(internal linkage)。這些概念實際上是上述傳統的存儲類概念的規範化。

相關詞條

熱門詞條

聯絡我們