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)