【问题标题】:Ada: Convert an access to constant to access to variableAda:将对常量的访问转换为对变量的访问
【发布时间】:2017-08-05 00:17:37
【问题描述】:

将访问常量转换为访问的正确方法是什么 多变的? (是的,我知道那我需要小心不要修改这个 “变量”。)

也许Unchecked_Conversion

但是:

  1. 标准是否保证Unchecked_Conversion 在此工作良好 案例?

  2. 有没有比Unchecked_Conversion更简单的方法?

【问题讨论】:

    标签: pointers constants ada


    【解决方案1】:

    Unchecked_Conversion 不能保证在这种情况下工作,因为 Ada 不保证访问类型的内存布局。据说 Ada 有意允许编译器对每种访问类型具有唯一的内存布局和含义。

    如果您在访问类型中添加Convention => C 方面,您可能会获得所需的通用内存布局,因为 C 认为所有指针都在同一地址空间上操作。

    【讨论】:

      【解决方案2】:

      好的,发生的事情 [可能] 某处的参数模式(可能还有类型定义)不匹配。

      假设有几种类型:

      Type Window(<>) is tagged private;
      Type Constant_Reference is not null constant access Window'Class;
      Type Reference is not null access Window'Class;
      Type Handle is access Window'Class;
      

      鉴于Function Get_Handle ( Object : in out aliased Window'Class ),我们能对Object'Access 说些什么?嗯,它是对 Window'Class 的访问,它不是恒定的——因此它与 HandleReference 兼容,但不兼容 Constant_Reference

      另一方面,如果我们有Function Get_Handle ( Object : aliased Window'Class ),那么Object'Access 将产生与Constant_Reference 兼容的匿名访问,这是由于in-parameter 的恒定性质。

      因此,请检查您的参数和设计,看看是否是导致您的问题的原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-22
        • 1970-01-01
        • 2014-06-25
        • 1970-01-01
        • 2012-11-02
        • 2014-04-05
        • 2019-01-26
        相关资源
        最近更新 更多