D надає ряд основних типів, які завжди мають той же
розмір незалежно від платформи. Єдиним винятком
є тип real
, який надає максимально можливу
точність для чисел з плаваючою точкою. Немає ніякої різниці
між розміром цілого числа незалежно від того, чи була програма
скомпільована для 32-бітової чи 64-бітової системи.
Тип | Розмір |
---|---|
bool | 8 біт |
byte , ubyte , char | 8 біт |
short , ushort , wchar | 16 біт |
int , uint , dchar | 32 біта |
long , ulong | 64 біта |
float | 32 біта |
double | 64 біта |
real | залежно вiд платформи, 80 бiт на Intel x86-32 |
Тип | Розмір |
---|---|
float | 32 біта |
double | 64 біта |
real | >= 64 біта (зазвичай 64 біта, але 80 біт на Intel x86-32) |
Префікс u
позначає беззнаковi (unsigned) типи. char
є UTF-8
символом, wchar
використовується в UTF-16 рядках і dchar
в UTF-32 рядках.
Перетворення між змінними різних типів допускається компілятором лише
якщо немає втрати точностi. Хоча конверсія між плаваючими типами
(наприклад double
у float
) допускається.
Перетворення в інший тип може бути примусовим при використаннi виразу
cast(<ТИП>) <змінна>
. Перетворення необхідно використовувати з великою
обережністю, оскiльки виразу cast
дозволено порушувати систему типів.
Спеціальне ключове слово auto
створює змінну і виводить її
тип з правої частини виразу. Наприклад, auto MyVar = 7
виведе тип
int
для myVar
. Зверніть увагу, що тип буде визначено під час
компіляції і він не може бути змінений пiзнiше - так само, як з
будь-якою іншою змінною з явно заданим типом.
Всі типи даних мають властивість .init
- значення, яким вони
iнiціалізуються. Для всіх цілих чисел це "0", для типiв з плаваючою
точкою це NaN
(not a number, Не число).
Цілі типи та типи з плаваючою точкою мають властивість .max
, яка
повертає найбільше значення, яке вони можуть містити. Цілі типи
також мають властивість .min
для найменшого значення, яке вони можуть
містити, у той час, як типи з плаваючою точкою мають властивість
.min_normal
, яка визначається найменшим представимим нормованним
значенням, не рівне 0.
Типи з плаваючою точкою також мають властивість .NaN
(NaN-значення),
.infinity
(значення нескінченності), .dig
(точнiсть у кількостi
десяткових цифр), .mant_dig
(кількість бітів у мантисі) і багато інших.
Кожен тип також має властивість .stringof
, яка повертає його назву
у вигляді рядка.
У D індекси мають зазвичай тип псевдоніма (Alias) size_t
, так як це
є досить великий тип, щоб представляти зміщення в усій адресній
пам'яті - тобто uint
для 32-розрядних і ulong
для 64-розрядних
архітектур.
assert
- це вираз, який перевіряє умови у режимі налагодження (Debug)
і завершує роботу з AssertionError
, якщо умова не виконується.