我正在阅读 learn.adacore.com 教程,但遇到了一个我不确定的问题。
具体来说,我知道 Ada 旨在捕获试图溢出具有指定范围定义的变量的尝试。
在下面的情况下,第一次尝试这样做会导致编译器“范围检查失败”,这是预期的。但是以下行并没有捕获它,我不知道为什么:
with Ada.Text_IO; use Ada.Text_IO;
procedure Custom_Floating_Types is
type T_Norm is new float range -1.0 .. 1.0;
D : T_Norm := 1.0;
begin
Put_Line("The value of D =" & T_Norm'Image(D));
-- D := D + 1.0; -- This causes a range check failure at run time = completely expected.
Put_Line("The value of D =" & T_Norm'Image(D + 1.0)); -- This doesn't?
end Custom_Floating_Types;
Run Code Online (Sandbox Code Playgroud) ada ×1