delphi - 当参数类型为开放Char数组时,是否允许使用动态Char数组?

标签 delphi dynamic-arrays open-array-parameters

我正在查看Delphi: array of Char and TCharArray "Incompatible Types"并开始尝试。我的发现很有趣。

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.

这个简单的小示例展示了如何使用开放数组参数将动态数组传递给过程。它完全按照预期编译和运行。

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'

为什么会这样?

搜索了一段时间后我发现this质量控制报告。我正在运行 Delphi 2009 并且它仍然发生。

最佳答案

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

function Find(A: array of Char): Integer;
[...]
Note: [...] The previous example creates a function that takes any array of Char elements, including (but not limited to) dynamic arrays. [...]

关于delphi - 当参数类型为开放Char数组时,是否允许使用动态Char数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3781691/

相关文章:

delphi - TRect.Intersect 和 TRect.IntersectsWith 不一致

c++ - O* p = 新的 O[5]; p 指向什么?

delphi - 无法将类型化字符数组传递给打开的字符数组?

delphi - Delphi 7 和 Delphi 2007 中接口(interface)的区别

Delphi - 如何 'Overload' 'procedure of object' 类型

多维动态数组中的 C++ 对象构造

delphi - 为什么我可以将 X 类型的 var 传递给该类型的开放数组参数?

sql-server - Delphi 与 SQL Server : OLEDB vs. native 客户端驱动程序

c - 带 void 的动态数组内存分配**