gpt4 book ai didi

ada - Ada 中的 Unchecked_Conversion

转载 作者:行者123 更新时间:2023-12-04 13:05:00 26 4
gpt4 key购买 nike

任何人都可以让我清楚地了解在 Ada 语言中使用未经检查的转换。我已经尝试过 pdf 和 net,但都没有给我一个清晰的画面。

现在我有一小段代码如下所示:

subtype Element4_Range is integer range 1..4;
subtype Element3_Range is integer range 1..3;
subtype Myarr_Range is integer range 1..10;
type Myarr3_Type is array (Myarr_Range) of Element3_Range;
type Myarr4_Type is array (Myarr_Range) of Element4_Range;
Myarr3 : Myarr3_Type;
Myarr4 : Myarr4_Type := (1, 2, 3, 3, 1, 3, 2, 1, 2, 1);
Count_1 : Integer := 0;
Count_2 : Integer := 0;
Count_3 : Integer := 0;
*function To_Myarr3 is new Unchecked_Conversion(Myarr4_type, Myarr3_type);*

现在我的疑问是函数 Myarr3 究竟做了什么?

最佳答案

Unchecked_Conversion 的实例将源值的字节复制到目标,而不检查这是否合理。如果值的大小不同,一些编译器会发出警告(可能取决于编译选项)。

Element3_RangeElement4_Range 都基于 Integer 并将使用相同的字节数;因此您的两个数组变量(Myarr3Myarr4)将需要相同数量的字节(通常为 40)。

你可以写

Myarr3 := To_Myarr3 (Myarr4);

就目前而言,没有什么不好的事情会发生,因为您用于初始化 Myarr4 的所有值都是合法的 Element3_Range 值。

但是,如果你有

Myarr3 := To_Myarr3 (Myarr4'(1, 2, 3, 4, others => 1));

你最终会得到包含 Element3_Range 合法范围之外的值的 Myarr3(4),并且编译器没有理由相信它可能不会有效。这很可能会导致 Constraint_Error 错误。

你可以自己强制检查:

if not Myarr3 (4)'Valid then
-- handle the error case

关于ada - Ada 中的 Unchecked_Conversion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2673065/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com