Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   EMB DCE 12 - Unterschied zwischen v: TArray<T> und v: Array of T ? (https://www.delphipraxis.net/216000-emb-dce-12-unterschied-zwischen-v-tarray-t-und-v-array-t.html)

paule32.jk 9. Okt 2024 16:05

EMB DCE 12 - Unterschied zwischen v: TArray<T> und v: Array of T ?
 
Hallo,
in Zusammenhang mit Templates und Array's habe ich folgende zwei Möglichkeiten der Codierung bemerkt, und frage mich nun, was der Unterschied zwischen:

Delphi-Quellcode:
constructor Create(v: Array of T); overload;
...
constructor QChar<T>.Create<v: Array of T);
und:
Delphi-Quellcode:
constructor Create(v: TArray<T>); overload;
...
constructor QChar<T>.Create(v: TArray<T>);
ist.
Beide Möglichkeiten können vom Compiler übersetzt werden.

AuronTLG 9. Okt 2024 16:15

AW: EMB DCE 12 - Unterschied zwischen v: TArray<T> und v: Array of T ?
 
Erstes Ergebnis der Google-Suche.

himitsu 9. Okt 2024 17:17

AW: EMB DCE 12 - Unterschied zwischen v: TArray<T> und v: Array of T ?
 
Als "Typ"-Deklaration das Gleiche, denn
Zitat:

Delphi-Quellcode:
type
  TArray<T> = array of T;

Aber generische Typen werden global "identisch" behandelt,
während es nicht-generisch nur "gleich/ähnlich", aber nicht kompatibel ist.

Delphi-Quellcode:
type
  A = array of Integer;
  B = array of Integer;
  C = TArray<Integer>;
  D = TArray<Integer>;
A und B sehen gleich aus, sind allerdings nur gleich aber nicht zuweisungs-kompatibel, da jeweils eigene TypeInfo/RTTI.
Ebenso A/B und C.

C und D sind aber identische Alias des selben generischen Types.
Delphi-Quellcode:
a := b; // geht nicht
a := c; // geht nicht
c := d; // geht


Und als Parameter, ist array-of ein Open-Array, also was ganz Anderes, zu dem aber ALLE anderen Array-Typen und Array-Konstanten zuweisungskompatibel sind.
https://docwiki.embarcadero.com/RADS...en/Open_Arrays

Delphi-Quellcode:
//type X = array[0..666] of Integer;
//procedure Test(arr: array of Integer);

// geht alles
Test(a);
Test(c);
Test([1, 2, 3]);
Test(x);


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz