EasyC++,自動存儲持續性
大家好,我是梁唐。
想要追求更好閱讀體驗的同學,可以點擊「閱讀原文」訪問github倉庫。
自動存儲持續性
這個概念乍一看有些拗口,其實它很簡單,指的是在函數定義中聲明的變量的存儲持續性是自動的:它們在程序開始執行其所屬的函數或代碼塊時被創建,在執行完函數或代碼塊時,它們使用的內存被釋放。
在默認情況下,我們在函數中聲明的變量和函數的參數都是自動存儲持續性,它的作用于為局部,沒有鏈接性。
這里的鏈接性描述了名稱如何在不同的單元之間共享,鏈接性為外部的名稱可以在文件之間共享,鏈接性為內部的名稱只能由一個車文件中的函數共享。自動變量的名稱沒有鏈接性,也就是不能共享。
這段話是一段專業性描述,看不太明白沒有關系。簡單理解,就是說如果我們在main函數當中聲明了一個變量a,并且在函數test當中也聲明了一個同樣的變量a。兩者之間是完全獨立的,彼此不會有任何影響,因為它們只有在聲明了它的函數中才能使用。
當程序執行test函數時,test中的a才被創建,當test執行結束,a即被銷毀。
其實變量的作用域的最小劃分并不是函數,而是代碼塊。我們在代碼塊當中創建的變量,它的使用范圍作用域就只有當前代碼塊。例如:
- int main() {
- int a = 4;
- {
- int b = 10;
- }
- }
我們在main函數當中定義了一個變量a和一個變量b,但是這兩個變量定義的位置不同。b定義在了一個代碼塊(代碼塊使用花括號表示)當中,對于a來說,它的作用域是整個main函數,而b只在花括號當中生效。
更有意思的是下面這段代碼:
- int main() {
- int a = 4;
- {
- int a = 5;
- cout << a << endl;
- }
- cout << a << endl;
- }
答案是輸出的結果是5和4,為什么呢?
因為內部和外部都有一個變量a,當執行內部代碼的時候,編譯器隱藏了外部的定義。而程序離開代碼塊時,外部的定義又重新恢復。
本文轉載自微信公眾號「Coder梁」,可以通過以下二維碼關注。轉載本文請聯系Coder梁公眾號。