簡體   English   中英

Ada:將對常量的訪問轉換為對變量的訪問

[英]Ada: Convert an access to constant to access to variable

將對常量的訪問轉換為對變量的訪問的正確方法是什么? (是的,我知道那么我需要注意不要修改此“變量”。)

也許Unchecked_Conversion嗎?

但:

  1. 標准是否保證Unchecked_Conversion在這種情況下能正常工作?

  2. 有沒有比Unchecked_Conversion更簡單的方法?

在這種情況下,不能保證Unchecked_Conversion可以正常工作,因為Ada無法為您提供有關訪問類型的內存布局的任何保證。 假設Ada故意允許編譯器對每種訪問類型具有唯一的內存布局和含義。

如果在訪問類型中添加Convention => C方面,則可能會得到所需的公用內存布局,因為C認為所有指針都在同一地址空間上操作。

好的,正在發生的事情是[可能]在某處參數模式(可能是類型定義)不匹配。

假設有幾種類型:

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兼容。

因此,請檢查您的參數和設計,然后查看是否是造成問題的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM