Ada 编程/关键字/aliased
外观
如果你来自 C/C++,你可能习惯了这样一个事实,即 数组、结构体/记录 和其他变量的每个元素都具有一个地址。 C/C++ 标准实际上要求这样做。在 Ada 中,情况并非如此。
Ada 是一种自优化语言——例如,它没有像 C/C++ 中那样的 register 关键字。Ada 编译器将自动使用寄存器进行存储。顺便说一句,大多数现代 C/C++ 编译器现在只是忽略了 register 并自行分配寄存器,就像 Ada 一样。
因此,如果您想从任何变量获取 访问,您需要告诉编译器该变量需要在内存中,并且可能不会驻留在寄存器中。这就是 关键字 aliased 的作用。此外,它还可以作为程序阅读者关于存在引用该变量的指针的提示。
I : aliased
Integer := 0;
声明一个array
作为aliased
将仅确保该数组作为一个整体具有地址。它没有说明该array
的各个元素——这些元素可能以一种多个元素具有相同地址的方式打包。您需要将实际元素也声明为 aliased。您可以在 Types/array 中了解如何做到这一点。这里只是一个简短的示例
type
Day_Of_Monthis
range
1 .. 31;type
Day_Has_Appointmentis
array
(Day_Of_Month)of
aliased
Boolean;
与数组一样,将记录声明为 aliased 仅能确保该记录作为一个整体具有地址。它没有说明该记录的各个元素——这些元素同样可能被打包并共享地址。您同样需要将实际元素也声明为 aliased。您可以在 Types/record 中了解如何做到这一点。这里只是一个简短的示例
type
Basic_Recordis
record
A :aliased
Integer;end
record
;
Ada 关键字 | ||||
---|---|---|---|---|
abort
|
else
|
new
|
return
|
|
abs
|
elsif
|
not
|
reverse
|
|
abstract (Ada 95) |
end
|
null
|
||
accept
|
entry
|
select
|
||
access
|
exception
|
of
|
separate
|
|
aliased (Ada 95) |
exit
|
or
|
some (Ada 2012) |
|
all
|
others
|
subtype
|
||
and
|
for
|
out
|
synchronized (Ada 2005) |
|
array
|
function
|
overriding (Ada 2005) |
||
at
|
tagged (Ada 95) |
|||
generic
|
package
|
task
|
||
begin
|
goto
|
parallel (Ada 2022) |
terminate
|
|
body
|
pragma
|
then
|
||
if
|
private
|
type
|
||
case
|
in
|
procedure
|
||
constant
|
interface (Ada 2005) |
protected (Ada 95) |
until (Ada 95) |
|
is
|
use
|
|||
declare
|
raise
|
|||
delay
|
limited
|
range
|
when
|
|
delta
|
loop
|
record
|
while
|
|
digits
|
rem
|
with
|
||
do
|
mod
|
renames
|
||
requeue (Ada 95) |
xor
|