[英]Ada: Convert an access to constant to access to variable
將對常量的訪問轉換為對變量的訪問的正確方法是什么? (是的,我知道那么我需要注意不要修改此“變量”。)
也許Unchecked_Conversion
嗎?
但:
標准是否保證Unchecked_Conversion
在這種情況下能正常工作?
有沒有比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的訪問,它不是恆定的-因此它與Handle
和Reference
兼容,但與Constant_Reference
不兼容。
另一方面,如果我們具有Function Get_Handle ( Object : aliased Window'Class )
則由於參數中的恆定性質, Object'Access
將產生匿名訪問,該訪問與Constant_Reference
兼容。
因此,請檢查您的參數和設計,然后查看是否是造成問題的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.