Ada-访问常数混淆

Ada-访问常数混淆,ada,Ada,假设我有一个类型: type A; type XA is access constant A; type A is record Member : Natural := 1; Neighbor : XA; end record; 我对访问常数部分感到困惑。 如果我实例化了一个指向a实例的XA实例,那么在仅保留对XA实例的引用时,我可以更改什么 我可以更改XA指向的对象的成员吗?我想说不,但是XA对象中A的邻居呢 有人能给我解释一下访问常数的用法吗?下面是一

假设我有一个类型:

type A;
type XA is access constant A;
type A is
   record
      Member : Natural :=  1;
      Neighbor : XA;
   end record;
我对访问常数部分感到困惑。 如果我实例化了一个指向
a
实例的
XA
实例,那么在仅保留对
XA
实例的引用时,我可以更改什么

我可以更改
XA
指向的对象的成员吗?我想说不,但是
XA
对象中
A
的邻居呢


有人能给我解释一下访问常数的用法吗?

下面是一个小例子,说明它的作用:

过程访问\u常数为
类型XA是访问常量整数;
A:带别名的整数;
X:XA;
开始
X:=A'Access;
X.all:=4;
终端访问_常数;
当您试图编译它时,对
X
的赋值工作正常(
X
是一个变量),而对
X.all
的赋值是禁止的(因为
X.all
是一个常量-根据
XA
的定义)


虽然
XA
被声明为指向一个
常量整数
,但即使变量也是可以接受的,但您只能将
XA
实体的解引用视为一个
常量整数
,即使对象是一个变量。

请注意,您通常可以在Ada中很好地管理,而不使用访问类型。@Jacob,是的,但是没有它很难滚动你自己的列表。但是你什么时候滚动你自己的列表呢?所以为了弄清楚这一点,如果一个
访问常量出现在左边,无论如何,我不能在右边给它赋值?不。但是你不能给
常量赋值。如果你试着编译这个例子,你会发现
X:=A'Access
工作得很好。@zython我认为它更像是
constant
应用于右边。即
access常量整数
应理解为“访问常量整数”,而不是像“访问常量整数”。另一个意思是写入
常量访问