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

Edw*_*Yip 6 delphi delphi-xe4

const
  minDriveFreeSpace: Int64 = 1024*1024*1024*99;
Run Code Online (Sandbox Code Playgroud)

var
  minDriveFreeSpace: Int64;
begin
  minDriveFreeSpace := 1024*1024*1024*99;
Run Code Online (Sandbox Code Playgroud)

会发出:

[dcc32 Error] DataStoreLocator.pas(92): E2099 Overflow in conversion or arithmetic operation
Run Code Online (Sandbox Code Playgroud)

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

Ken*_*ite 10

您需要在右侧投射至少一个值Int64.例如,这两个在XE6上编译得非常好:

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

var
  minDriveFreeSpace2: Int64;
begin
  minDriveFreeSpace2 := Int64(1024)*1024*1024*99;
Run Code Online (Sandbox Code Playgroud)

请注意,它可以是任何一个施放的右值.例如,这也同样有效:

const
  minDriveFreeSpace = 1024 * 1024 * 1024 * Int64(99);
Run Code Online (Sandbox Code Playgroud)

这在Delphi语言指南中有记载(尽管很差) - 强调我的:

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

var
I: Integer;
J: Int64;
... 
I := High(Integer);
J := I + 1;
Run Code Online (Sandbox Code Playgroud)

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

...
J := Int64(I) + 1;
Run Code Online (Sandbox Code Playgroud)