Musisz rzucić co najmniej jedną wartość z prawej strony na Int64
. Na przykład, zarówno tych kompilacji doskonale na XE6:
const
minDriveFreeSpace = Int64(1024) * 1024 * 1024 * 99;
var
minDriveFreeSpace2: Int64;
begin
minDriveFreeSpace2 := Int64(1024)*1024*1024*99;
Należy pamiętać, że może to być dowolny z rvalues które oddanych. Na przykład, działa równie dobrze:
const
minDriveFreeSpace = 1024 * 1024 * 1024 * Int64(99);
Jest to udokumentowane w Delphi language guide (choć raczej słabo) - nacisk Mine:
W ogóle, operacje arytmetyczne na całkowite zwraca wartość typ Integer, który jest odpowiednikiem 32-bitowej LongInt. Operacje zwracają wartość typu Int64 tylko wtedy, gdy wykonywane są na jednym lub kilku operandach Int64. Dlatego dodaje kod generuje nieprawidłowe wyniki:
var
I: Integer;
J: Int64;
...
I := High(Integer);
J := I + 1;
uzyskać wartości zwracanej Int64 w tej sytuacji oddania I jak Int64:
...
J := Int64(I) + 1;
Ciekawe! Wydaje się, że jest to również związane z reprezentowaniem spodu dysku w tym podobnym (zduplikowanym) pytaniu wskazanym przez Davida. –