Ошибка или предел максимума Delphi. постоянные целочисленные значения? [дубликат]
этот вопрос уже есть ответ здесь:
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 ответов
вам нужно бросить хотя бы одно значение справа на Int64
. Например, оба они прекрасно компилируются на XE6:
const
minDriveFreeSpace = Int64(1024) * 1024 * 1024 * 99;
var
minDriveFreeSpace2: Int64;
begin
minDriveFreeSpace2 := Int64(1024)*1024*1024*99;
обратите внимание, что это может быть любой из rvalues, которые брошены. Например, это работает одинаково хорошо:
const
minDriveFreeSpace = 1024 * 1024 * 1024 * Int64(99);
это описано в Delphi руководство по языку (хотя и довольно слабо) - акцент мое:
В общем случае возвращаются арифметические операции над целыми числами значение типа Integer, которое эквивалентно 32-разрядному LongInt. операции возвращают значение типа Int64 только при выполнении одного или нескольких операндов Int64. таким образом, следующий код дает неправильные результаты:
var
I: Integer;
J: Int64;
...
I := High(Integer);
J := I + 1;
чтобы получить возвращаемое значение Int64 в этой ситуации, приведите I как Int64:
...
J := Int64(I) + 1;