Я смотрел 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, и это все еще происходит.