const
minDriveFreeSpace: Int64 = 1024*1024*1024*99;
和
var
minDriveFreeSpace: Int64;
begin
minDriveFreeSpace := 1024*1024*1024*99;
将发出:
[dcc32 Error] DataStoreLocator.pas(92): E2099 Overflow in conversion or arithmetic operation
这是Delphi的最大错误还是极限。常量整数值?
您需要在的右侧至少投射一个值Int64
。例如,这两种代码在XE6上都能很好地编译:
const
minDriveFreeSpace = Int64(1024) * 1024 * 1024 * 99;
var
minDriveFreeSpace2: Int64;
begin
minDriveFreeSpace2 := Int64(1024)*1024*1024*99;
请注意,它可以是强制转换的任何右值。例如,这同样有效:
const
minDriveFreeSpace = 1024 * 1024 * 1024 * Int64(99);
这在《Delphi语言指南》中进行了介绍(尽管效果不佳)-请特别注意:
通常,对整数的算术运算将返回Integer类型的值,该值等效于32位LongInt。仅当对一个或多个Int64操作数执行操作时,操作才会返回Int64类型的值。因此,以下代码将产生错误的结果:
var
I: Integer;
J: Int64;
...
I := High(Integer);
J := I + 1;
要在这种情况下获取Int64返回值,请将I强制转换为Int64:
...
J := Int64(I) + 1;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句