相关疑难解决方法(0)

将TArray <X>类型转换为X数组是否安全?

今天我发现了一个编译器错误(QC#108577).

以下程序无法编译:

program Project1;
{$APPTYPE CONSOLE}

procedure P(M: TArray<TArray<Integer>>);
begin
  SetLength(M, 1, 2);
end;

begin
end.
Run Code Online (Sandbox Code Playgroud)

编译器在线上噱头SetLength说:

[dcc32 Error] E2029 ')' expected but ',' found
Run Code Online (Sandbox Code Playgroud)

我知道我可以像这样解决它:

procedure P(M: TArray<TArray<Integer>>);
var
  i: Integer;
begin
  SetLength(M, 1);
  for i := low(M) to high(M) do
    SetLength(M[i], 2);
end;
Run Code Online (Sandbox Code Playgroud)

但我自然希望避免不得不诉诸于此.

以下变体编译并且似乎有效:

procedure P(M: TArray<TArray<Integer>>);
type
  TArrayOfArrayOfInteger = array of array of Integer;
begin
  SetLength(TArrayOfArrayOfInteger(M), 1, 2);
end;
Run Code Online (Sandbox Code Playgroud)

我对动态数组,TArray<T>转换,引用计数等的实现细节知之甚少,以确信这是安全的.

是否有人知道这样或那样的方式是否会在运行时产生正确的代码?

delphi generics casting dynamic-arrays delphi-xe2

16
推荐指数
1
解决办法
3218
查看次数

标签 统计

casting ×1

delphi ×1

delphi-xe2 ×1

dynamic-arrays ×1

generics ×1