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最大的错误还是限制。常数整数值?
答案 0 :(得分:10)
您需要在右侧投放至少一个值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 language guide(虽然相当差) - 强调我的文件中有记载:
通常,对整数的算术运算返回Integer类型的值,该值等同于32位LongInt。 仅当在一个或多个Int64操作数上执行时,操作才返回Int64类型的值。因此,以下代码会产生不正确的结果:
var
I: Integer;
J: Int64;
...
I := High(Integer);
J := I + 1;
要在这种情况下获取Int64返回值,请将I转换为Int64:
...
J := Int64(I) + 1;