D bietet eine Vielzahl an elementaren Datentypen, die immer die gleiche Größe haben -
unabhängig von der Plattform.
Die einzige Ausnahme ist der Typ real
für welchen der Compiler
die höchstmöglichste Genauigkeit für Gleitkommazahlen wählt.
Es besteht kein Unterschied zwischen der Größe eines Ganzzahltypen - unabhängig davon
ob die Anwendung für eine 32-bit oder 64-bit Architektur kompiliert wird.
bool | 8-bit |
byte, ubyte, char | 8-bit |
short, ushort, wchar | 16-bit |
int, uint, dchar | 32-bit |
long, ulong | 64-bit |
float | 32-bit |
double | 64-bit |
real | abhängig von der Plattform, 80-bit für Intel x86 32-bit |
Der Präfix u
kennzeichnet Typen ohne Vorzeichen (vom Englischen unsigned
).
Ein char
ist ein UTF-8 Zeichen, wchar
ein UTF-16 Zeichen and dchar
ein UTF-32 Zeichen.
Eine Umwandlung zwischen Variablen ist nur erlaubt wenn keine Präzision verloren
gehen kann, obgleich die Umwandlung von Gleitkommatypen (z. B. double
zu float
)
erlaubt ist.
Eine Umwandlung zu einem anderen Typ kann durch den Ausdruck
cast(TYPE) <varName>
erzwungen werden. Dieser Ausdruck sollte aber mit großer
Vorsicht verwenden werden, da mit dem cast
Ausdruck das Typsystem ausgeschaltet
wird.
Das spezielle Schlüsselwort auto
erzeugt eine Variable und inferiert ihren Typ
automatisch anhand des Ausdruck auf der rechten Seite. Zum Beispiel wird
auto i = 7
den Typ int
deduzieren. Es sollte beachtet werden, dass auto
Typen trotzdem
statisch während der Kompilierphase festgelegt werden und den Typ nachträglich nicht
ändern können, wie für jede andere Variable mit explizitem Typ.
Alle Datentypen haben die Eigenschaft .init
, welche dem Initialwert gleicht.
Für alle Ganzzahlen ist dies 0
und für Gleitkommazahlen ist es nan
(vom Englischen
"not a number"). Sowohl Ganzzahl- als auch Gleitkommatypen haben eine .min
und
.max
Eigenschaft für die kleinste und größte Zahl, die der Typ darstellen kann.
Gleitkommatypen besitzen noch weitere Eigenschaften: nan
(der ungültige Zustand),
infinity
(unendlich), .dig
(Anzahl der dezimalen Stellen der Präzision) und
.mant_dig
(Anzahl an Bits der Mantisse) und Weitere.
Zusätzlich besitzt jeder Typ die .stringof
Eigenschaft welche seinen Namen als
String zurückgibt.
In D haben Indizes den Aliasnamen size_t
welcher groß genug ist um alle
Speicherzellen adressieren zu können, d.h. für ein 32-bit System uint
und für
ein 64-bit System ulong
.
assert
ist eine eingebaute Anweisung welche Ausdrücke im Debugmodus validiert
und einen AssertionError
wirft, wenn die Evaluation des Ausdruckes false
liefert.