跳转至内容

Ada 编程/关键字/aliased

来自维基教科书,自由的教学资源

Ada. Time-tested, safe and secure.
Ada. 经久耐用,安全可靠。

如果你来自 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_Month is range 1 .. 31;
 type Day_Has_Appointment is array (Day_Of_Month) of aliased Boolean;

对于记录的元素

[编辑 | 编辑源代码]

与数组一样,将记录声明为 aliased 仅能确保该记录作为一个整体具有地址。它没有说明该记录的各个元素——这些元素同样可能被打包并共享地址。您同样需要将实际元素也声明为 aliased。您可以在 Types/record 中了解如何做到这一点。这里只是一个简短的示例

type Basic_Record is
   record
      A : aliased Integer;
   end record;

维基教科书

[编辑 | 编辑源代码]

Ada 参考手册

[编辑 | 编辑源代码]

Ada 质量和风格指南

[编辑 | 编辑源代码]


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
华夏公益教科书