Ошибка или предел максимума 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;