複製鏈接
請複製以下鏈接發送給好友

自動變量

鎖定
計算機編程領域,自動變量Automatic Variable)指的是局部作用域變量,具體來説即是在控制流進入變量作用域時系統自動為其分配存儲空間,並在離開作用域時釋放空間的一類變量
中文名
自動變量
外文名
Automatic Variable
定    義
函數返回系統回收變量佔存儲空間
介    紹
存儲空間分配回收由系統自動完成
説    明
不作專門説明的局部變量
學    科
計算機

自動變量簡介

在計算機編程領域,自動變量Automatic Variable)指的是局部作用域變量,具體來説即是在控制流進入變量作用域時系統自動為其分配存儲空間,並在離開作用域時釋放空間的一類變量。在許多程序語言中,自動變量與術語“局部變量”(Local Variable)所指的變量實際上是同一種變量,所以通常情況下“自動變量”與“局部變量”是同義的。

自動變量不同程序語言中的實現

自動變量C、C++

自動變量在C與C++中的實現即為“自動變量”(Automatic Variable)。默認情況下,在代碼塊內聲明的變量都是自動變量,但亦可用自動變量的關鍵字auto明確標識存儲類;而如若使用register(而非auto)存儲類標識代碼塊內的變量,編譯器就會將變量緩存於處理器內的寄存器中,此種情況下不能對該變量或其成員變量使用引用操作符&以獲取其地址,因為&只能獲取內存空間中的地址;除此以外,由於寄存器的數量及其所能存儲的數據類型硬件限制而可能無法存儲指定變量,編譯器可以忽略聲明內的register關鍵字。對於一個未初始化的自動變量來説,在為其賦值之前其值都為undefined(未定義)。 [1] 
在C++中,如諺語“資源獲取即初始化”(Resource Acquisition Is Initialization,常縮寫為RAII)所述,自動變量的構造函數在程序運行至聲明部分的時候才會被調用,而當程序運行至所給的程序塊末端的時候則調用析構函數,這一特性常應用於資源的分配與釋放管理,如自動關閉已開啓的文件或自動釋放空閒內存。 [2] 

自動變量Java

自動變量在Java中的實現為“局部變量”(Local Variable)。Java中的自動變量與C、C++中的相似,但Java中並無auto、register這些標識存儲類用的關鍵字。但相對應的,Java編譯器亦不允許使用沒有明確初始化的局部變量(會提示錯誤),這一點與C、C++不同,在C與C++中編譯器只會對這類用法做出警告。根據Java標準的要求,每個局部變量在使用之前都必須明確地初始化,從這點來説Java中的局部變量與可以默認值(數值變量對應0,對象對應null)進行隱式初始化的實例變量是有所差異的。

自動變量Perl

自動變量在C與C++中的實現則為詞法變量(Lexical)、my/私有變量(Private Variable)。在Perl中,局部變量是以操作符my聲明的。未初始化的數據項的默認初值是undef,而未初始化的數組與散列的默認初值則為()。Perl中亦可用local操作符將全局變量臨時用作自動變量,也即在不創建自動變量的情況下給一個全局變量(亦稱包變量)臨時賦值(原值則先保存於別處)並將其作用域限定在代碼塊內,當執行到變量的作用域之外時再恢復原值。
參考資料
  • 1.    吳嶽等.Linux C程序設計大全:清華大學出版社,2009:299
  • 2.    林昌意. C 語言程序設計[J]. 中國電力教育: 上, 2006 (0S2): 364-365.