德尔福的最大错误或限制。常数整数值?

时间:2014-05-13 15:00:50

标签: delphi delphi-xe4

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最大的错误还是限制。常数整数值?

1 个答案:

答案 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;