Delphi的缺陷或限制';s最大常量整数值?

Delphi的缺陷或限制';s最大常量整数值?,delphi,delphi-xe4,Delphi,Delphi Xe4,及 将发出: var minDriveFreeSpace: Int64; begin minDriveFreeSpace := 1024*1024*1024*99; 这是Delphi的最大常量整数值的错误还是限制?您需要在右侧将至少一个值强制转换为Int64。例如,这两种方法在XE6上都可以很好地编译: [dcc32 Error] DataStoreLocator.pas(92): E2099 Overflow in conversion or arithmetic operation

将发出:

var
  minDriveFreeSpace: Int64;
begin
  minDriveFreeSpace := 1024*1024*1024*99;

这是Delphi的最大常量整数值的错误还是限制?

您需要在右侧将至少一个值强制转换为
Int64
。例如,这两种方法在XE6上都可以很好地编译:

[dcc32 Error] DataStoreLocator.pas(92): E2099 Overflow in conversion or arithmetic operation
请注意,它可以是任意一个强制转换的右值。例如,这同样有效:

const
  minDriveFreeSpace = Int64(1024) * 1024 * 1024 * 99;

var
  minDriveFreeSpace2: Int64;
begin
  minDriveFreeSpace2 := Int64(1024)*1024*1024*99;
这一点记录在(尽管相当糟糕)重点矿山:

通常,对整数的算术运算返回一个Integer类型的值,该值相当于32位LongInt仅当对一个或多个Int64操作数执行操作时,操作才会返回Int64类型的值。因此,以下代码产生不正确的结果:

要在这种情况下获取Int64返回值,请将I强制转换为Int64:


有趣!它似乎还与在David指出的类似(重复)问题中表示磁盘spce有关
const
  minDriveFreeSpace = Int64(1024) * 1024 * 1024 * 99;

var
  minDriveFreeSpace2: Int64;
begin
  minDriveFreeSpace2 := Int64(1024)*1024*1024*99;
const
  minDriveFreeSpace = 1024 * 1024 * 1024 * Int64(99);
var
I: Integer;
J: Int64;
... 
I := High(Integer);
J := I + 1;
...
J := Int64(I) + 1;