Разрешен ли динамический массив Char, если тип параметра является открытым массивом Char?

Я смотрел Delphi: массив Char и TCharArray «Несовместимые типы» и начал экспериментировать. То, что я обнаружил, довольно интересно.

procedure Clear(AArray: array of Integer);
var
  I: Integer;
begin
  for I := Low(AArray) to High(AArray) do
    AArray[I] := 0;
end;

var
  MyArray: array of Integer;
begin
  Clear(MyArray);
end.

Этот простой небольшой пример показывает, как вы можете передать динамический массив в процедуру, используя параметр Open Array. Он компилируется и работает точно так, как ожидалось.

procedure Clear(AArray: array of Char);
var
  I: Integer;
begin
  for I := Low(AArray) to High(AArray) do
    AArray[I] := #0;
end;

var
  MyArray: array of Char;
begin
  Clear(MyArray);
end.

Здесь почти идентичный код, с той лишь разницей, что он использует массив Char , а не Integer . Не компилируется. Вместо этого компилятор выплевывает:

 E2010 Incompatible types: 'Array' and 'Dynamic array'

Почему это должно быть?

После некоторого поиска я обнаружил этот отчет QC. Я запускаю Delphi 2009, и это все еще происходит.

11
задан Community 23 May 2017 в 11:33
поделиться