【问题标题】:Ada - access constant confusionAda - 访问不断的混乱
【发布时间】:2018-05-28 11:22:06
【问题描述】:

假设我有一个类型:

type A;
type XA is access constant A;
type A is
   record
      Member : Natural :=  1;
      Neighbor : XA;
   end record;

我对访问常量部分感到困惑。 如果我实例化一个指向A 实例的XA 实例,我可以在只保留对XA“实例”的引用时更改什么?

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

有人可以向我解释access constant 的用法吗?

【问题讨论】:

  • 请注意,您通常可以在不使用访问类型的情况下在 Ada 中进行很好的管理。
  • @Jacob,是的,但如果没有,很难推出自己的清单。
  • 但是你什么时候推出自己的清单?

标签: ada


【解决方案1】:

下面是一个小例子,展示了它的作用:

procedure Access_Constant is

   type XA is access constant Integer;

   A : aliased Integer;
   X : XA;
begin
   X := A'Access;
   X.all := 4;
end Access_Constant;

当您尝试编译它时,对 X 的赋值工作正常(X 是一个变量),而对 X.all 的赋值是禁止的(因为 X.all 是一个常量 - 根据 @ 的定义987654326@).

虽然XA 被声明为指向constant Integer,即使是变量也是可以接受的,但你只能将XA 实体的取消引用视为constant Integer,即使对象是变量。

【讨论】:

  • 所以为了弄清楚这一点,如果access constant 出现在左侧,无论如何,我不能在右侧为其分配任何值?
  • 没有。但是您不能为constant 赋值。如果您尝试编译该示例,您将看到 X := A'Access 工作正常。
  • @zython 我认为它更像是constant 适用于右侧。即access constant Integer; 应该读作“访问常量整数”,而不是“访问常量整数”。
  • 其他意思写成constant access
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-21
  • 1970-01-01
  • 1970-01-01
  • 2017-10-13
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多