考虑:
{$R+}
i:= 1;
While i > 0 do
i:= i + 1;
ShowMessage(IntToStr(i));
如果我声明我是字节,Word,Shortint或TinyInt我得到一个范围检查错误,如预期.
如果我将我声明为LongWord,Cardinal,Integer,LongInt或Int64,那么它将通过while循环,并显示负值或0值,当我通过上限时,我得到的值.
Delphi 7不支持32位和64位数字的范围检查?
操作i 1实际上不产生范围检查
错误.分配操作.
Delphi将常量’1’评估为整数,因此右侧将产生一个Int64或Integer(i的类型和整数)中的较大的结果.
如果我们扩展线,我们得到以下
temp := i + 1
i := temp
temp将为32位或64位,如果遇到上限,将会溢出.当我们做任务时,我们有一个完全有效的32或64位值,所以如果我是32bits或更多,没有范围检查失败的可能性.
如果我小于32位,则如果温度太大而不适合,则会提高范围检查.
对于i> = 32bits,您可以像这样捕获溢出错误:
{$R+,Q+}
...
原文链接:https://www.f2er.com/delphi/102768.html