11
由於TBytes,TByteDynArray和字節數組都是字節的動態數組,所以可以將類型變量安全地互相轉換? (如果我有一個變量TBytes,我可以簡單地使用TByteDynArray將參數定義爲TByteDynArray,反之亦然,只需要將其轉換爲TByteDynArray)TBytes,TByteDynArray,字節數組可以安全地互相轉換嗎?
由於TBytes,TByteDynArray和字節數組都是字節的動態數組,所以可以將類型變量安全地互相轉換? (如果我有一個變量TBytes,我可以簡單地使用TByteDynArray將參數定義爲TByteDynArray,反之亦然,只需要將其轉換爲TByteDynArray)TBytes,TByteDynArray,字節數組可以安全地互相轉換嗎?
這樣的類型轉換在我遇到的所有Delphi實現中都是完全安全的。
但是,像這樣重新解釋類型轉換會除去類型檢查,但將來對源代碼所做的更改總會存在導致難以跟蹤錯誤的風險。如果可能,我會盡量避免投射。例如,您可以做的最簡單的事情就是避免在代碼中使用array of Byte
作爲類型,並切換到TBytes
。
如果您必須施放,然後將其包裝在一個函數中以減輕我上面描述的風險。
function Bytes(const B: TByteDynArray): TBytes;
begin
Result := TBytes(B);
end;
在函數聲明後面添加一個'inline'將使代碼相對於生成的asm更加「透明」。 –
@Arnaud是的,這是有道理的。基本上這個功能除了擊敗類型系統外沒有任何其他功能,因此它完美的內聯! –
感謝您的編輯/附加點。 –