可以将TBytes,TByteDynArray,字节数组安全地相互映射吗?

Dar*_*ler 12 delphi casting

由于TBytes,TByteDynArray和Bytes数组都是动态字节数组,因此可以将类型变量安全地相互转换为类型吗?(如果我有一个TBytes变量,我可以简单地使用定义参数为TByteDynArray的方法对TByteDynArray进行类型转换,反之亦然?)

Dav*_*nan 10

这种类型转换在我遇到的所有Delphi实现中都是完全安全的.

但是,像这样的重新解释类型删除类型检查,总是存在未来对源代码的更改可能导致难以跟踪错误的风险.如果可能的话,我会尽量避免施法.例如,您可以做的最简单的事情是避免array of Byte在代码中使用类型并切换到TBytes.

如果你必须施放然后将其包装在一个函数中以减轻我上面描述的风险.

function Bytes(const B: TByteDynArray): TBytes;
begin
  Result := TBytes(B);
end;
Run Code Online (Sandbox Code Playgroud)

  • 在函数声明之后添加`inline`将使代码对于生成的asm更加"透明". (5认同)