存儲類定義 C++ 程序中變量/函數(shù)的范圍(可見性)和生命周期翠储。這些說明符放置在它們所修飾的類型之前爹袁。下面列出 C++ 程序中可用的存儲類:
auto
register
static
extern
mutable
thread_local (C++11)
auto 存儲類:
auto關(guān)鍵字用于兩種情況:聲明變量時(shí)根據(jù)初始化表達(dá)式自動推斷該變量的類型辆亏、聲明函數(shù)時(shí)函數(shù)返回值的占位符严嗜。
register 存儲類:
register存儲類用于定義存儲在寄存器中而不是 RAM 中的局部變量倒淫。這意味著變量的最大尺寸等于寄存器的大械锱亍(通常是一個(gè)詞)抖韩,且不能對它應(yīng)用一元的 '&' 運(yùn)算符(因?yàn)樗鼪]有內(nèi)存位置)。
static 存儲類:
static存儲類指示編譯器在程序的生命周期內(nèi)保持局部變量的存在疫铜,而不需要在每次它進(jìn)入和離開作用域時(shí)進(jìn)行創(chuàng)建和銷毀茂浮。因此,使用 static 修飾局部變量可以在函數(shù)調(diào)用之間保持局部變量的值壳咕。
static 修飾符也可以應(yīng)用于全局變量席揽。當(dāng) static 修飾全局變量時(shí),會使變量的作用域限制在聲明它的文件內(nèi)谓厘。
在 C++ 中幌羞,當(dāng) static 用在類數(shù)據(jù)成員上時(shí),會導(dǎo)致僅有一個(gè)該成員的副本被類的所有對象共享竟稳。
extern 存儲類:
extern存儲類用于提供一個(gè)全局變量的引用属桦,全局變量對所有的程序文件都是可見的熊痴。當(dāng)您使用 'extern' 時(shí),對于無法初始化的變量地啰,會把變量名指向一個(gè)之前定義過的存儲位置愁拭。
當(dāng)您有多個(gè)文件且定義了一個(gè)可以在其他文件中使用的全局變量或函數(shù)時(shí),可以在其他文件中使用extern來得到已定義的變量或函數(shù)的引用亏吝。可以這么理解盏混,extern是用來在另一個(gè)文件中聲明一個(gè)全局變量或函數(shù)蔚鸥。
extern 修飾符通常用于當(dāng)有兩個(gè)或多個(gè)文件共享相同的全局變量或函數(shù)的時(shí)候。
mutable 存儲類:
mutable說明符僅適用于類的對象许赃,這將在本教程的最后進(jìn)行講解止喷。它允許對象的成員替代常量。也就是說混聊,mutable 成員可以通過 const 成員函數(shù)修改弹谁。
thread_local 存儲類:
使用 thread_local 說明符聲明的變量僅可在它在其上創(chuàng)建的線程上訪問。 變量在創(chuàng)建線程時(shí)創(chuàng)建句喜,并在銷毀線程時(shí)銷毀预愤。 每個(gè)線程都有其自己的變量副本。
thread_local 說明符可以與 static 或 extern 合并咳胃。
可以將 thread_local 僅應(yīng)用于數(shù)據(jù)聲明和定義植康,thread_local 不能用于函數(shù)聲明或定義。