將訪問轉換爲常量以訪問 變量的正確方法是什麼? (是的,我知道那麼我需要小心不要修改這個 「變量」。)Ada:將訪問轉換爲常量以訪問變量
也許Unchecked_Conversion
?
但是:
是
Unchecked_Conversion
的標準保證在這種情況下, 很好地工作?有沒有比
Unchecked_Conversion
更簡單的方法?
將訪問轉換爲常量以訪問 變量的正確方法是什麼? (是的,我知道那麼我需要小心不要修改這個 「變量」。)Ada:將訪問轉換爲常量以訪問變量
也許Unchecked_Conversion
?
但是:
是Unchecked_Conversion
的標準保證在這種情況下, 很好地工作?
有沒有比Unchecked_Conversion
更簡單的方法?
Unchecked_Conversion
不能保證在這種情況下工作,如阿達不給你訪問類型的內存佈局任何保證。據推測,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
兼容。
因此,檢查你的參數和你的設計,看看是否是什麼導致你的問題。