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