当参数类型是Char的数组打开时,是否允许动态数组Char?

Ken*_*ran 11 delphi dynamic-arrays open-array-parameters

我在看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.
Run Code Online (Sandbox Code Playgroud)

这个简单的小例子展示了如何使用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.
Run Code Online (Sandbox Code Playgroud)

这是几乎完全相同的代码唯一的区别是它使用的是数组Char而不是Integer.它不编译.相反,编译器吐出:

 E2010 Incompatible types: 'Array' and 'Dynamic array'
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

在搜索了一段时间后,我发现了这个 QC报告.我正在运行Delphi 2009,它仍然在发生.

Ser*_*yuz 4

由于文档特别提到 Char 类型的开放数组参数与动态数组兼容,因此这应该是一个错误。来自“打开数组参数”

function Find(A: array of Char): 整数;
[...]
注意: [...] 前面的示例创建了一个函数,该函数接受任何 Char 元素数组,包括(但不限于)动态数组。[...]