计算机编程领域,自动变量Automatic Variable)指的是局部作用域变量,具体来说即是在控制流进入变量作用域时系统自动为其分配存储空间,并在离开作用域时释放空间的一类变量。在许多程序语言中,自动变量与术语“局部变量”(Local Variable)所指的变量实际上是同一种变量,所以通常情况下“自动变量”与“局部变量”是同义的。

不同程序语言中的实现

编辑

CC++

编辑

自动变量在C与C++中的实现即为“自动变量”(Automatic Variable)。默认情况下,在代码块内声明的变量都是自动变量,但亦可用自动变量的关键字auto明确标识存储类[1];而如若使用register(而非auto)存储类标识代码块内的变量,编译器就会将变量缓存处理器内的寄存器中,此种情况下不能对该变量或其成员变量使用引用操作符&以取得其地址,因为&只能取得内存空间中的地址;除此以外,由于寄存器的数量及其所能存储的数据类型硬件限制而可能无法存储指定变量,编译器可以忽略声明内的register关键字。对于一个未初始化的自动变量来说,在为其赋值之前其值都为undefined(未定义)[2]

在C++中,如谚语“资源获取即初始化”(Resource Acquisition Is Initialization,常缩写为RAII)所述,自动变量的构造函数在程序运行至声明部分的时候才会被调用,而当程序运行至所给的程序块末端的时候则调用析构函数,这一特性常应用于资源的分配与释放管理,如自动关闭已开启的文件或自动释放空闲内存。

Java

编辑

自动变量在Java中的实现为“局部变量”(Local Variable)。Java中的自动变量与C、C++中的相似,但Java中并无auto、register这些标识存储类用的关键字。但相对应的,Java编译器亦不允许使用没有明确初始化的局部变量(会提示错误),这一点与C、C++不同,在C与C++中编译器只会对这类用法做出警告。根据Java标准的要求,每个局部变量在使用之前都必须明确地初始化[3],从这点来说Java中的局部变量与可以默认值(数值变量对应0,对象对应null[4])进行隐式初始化的实例变量是有所差异的。

Perl

编辑

自动变量在C与C++中的实现则为词法变量(Lexical)、my/私有变量(Private Variable)。在Perl中,局部变量是以操作符my声明的。未初始化的数据项的默认初值是undef,而未初始化的数组散列的默认初值则为()。Perl中亦可用local操作符将全局变量临时用作自动变量,也即在不创建自动变量的情况下给一个全局变量(亦称包变量)临时赋值(原值则先保存于别处)并将其作用域限定在代码块内,当执行到变量的作用域之外时再恢复原值[5]

参考

编辑
  1. ^ 在C++当前的C++11标准中,关键字auto亦可用于对未标明类型的变量进行类型推断
  2. ^ 当前 C语言标准文档PDF(3.61MiB: section 6.2.4, Storage durations of objects(英文)
  3. ^ 4.12.5 Initial Values of Variables. Sun Microsystems. [2008-10-17]. (原始内容存档于2012-09-03). (英文)
  4. ^ Private variables via my() - perlsub - perldoc.perl.org. [2008-10-17]. (原始内容存档于2020-09-21). (英文)
  5. ^ Temporary values via local() - perlsub - perldoc.perl.org. [2011-02-25]. (原始内容存档于2020-09-21). (英文)

📚 Artikel Terkait di Wikipedia

EDVAC

离散变量自动电子计算机(英語:Electronic Discrete Variable Automatic Computer,EDVAC)是一台美国早期电子计算机。与它的前任ENIAC不同,EDVAC采用二进制,而且是一台冯·诺伊曼结构的计算机。 ENIAC和EDVAC的建造者均为宾夕法尼亚大学的电

B語言

a; /* Wikipedia note: auto declares a variable with automatic storage (lifetime is function scope), not "automatic typing" as in C++11. */ if (a = n / b)

HK M27步兵自動步槍

M27 步兵自動步槍(英語:M27 Infantry Automatic Rifle,簡稱:M27、IAR或M27 IAR,以下簡稱為M27 IAR)是一款5.56毫米口徑可切換射擊模式的突擊步槍,主要基於德國軍火製造商黑克勒&科赫所生產的HK416 北約5.56×45毫米口徑突擊步槍的16.5英吋(419

块 (编程)

right brace. …… An automatic variable declared and initialized in a block is initialized each time the block is entered. Automatic variables, including

Stable Diffusion

的描述產生詳細圖像,儘管它也可以應用於其他任務,如內補繪製、外補繪製,以及在提示詞指導下產生圖生圖的转变。 它是一種潛在(英语:Latent variable model)擴散模型,由慕尼黑大學的CompVis研究團體開發的各種生成性人工神經網絡之一。它是由初創公司StabilityAI、CompV

接近传感器

输送机系统(英语:Conveyor system) 移动设备 贴近脸部时关闭觸控式螢幕 靠近身体时降低无线电功率以削减辐射暴露 自动水龙头(英语:Automatic faucet) 动作探测器(英语:Motion detector) 占用传感器(英语:Occupancy sensor) Proximity

机械七段数字显示

在欧洲和北美的加油站外,使用装有机械七段数字显示的标牌显示油价。 俄克拉何马州高速公路管理局(英语:Oklahoma Turnpike Authority)在若干自动缴费机(automatic toll collection basket)上使用机械七段数字显示应付金额。 新泽西州收费高速公路在所有道路限速标牌上使用机械七段数字显

數碼寶貝03馴獸師之王

Link)出现。因此他们将这种现象称作“Monster”(电波怪物) 第一台并行计算机“离散变量自动电子计算机”(EDVAC,Electronic Discrete Variable Automatic Computer)诞生,它实现了计算机之父约翰·冯·诺伊曼(John von Neumann)的两个设想:采用二进制和存储程序。 1951年