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 | Зависит от платформы, 80 бит на 32-битной Intel x86 |
Префикс u
обозначает unsigned (беззнаковые) типы. char
означает UTF-8
символы, wchar
используется для UTF-16 строк и dchar
для UTF-32 строк.
Преобразование между переменными разных типов разрешается компилятором только
если не будет потери точности. При этом преобразование между числами с плавающей точкой (например, double
в float
) допускается.
Преобразование в другой тип может быть выполнено принудительно с помощью
выражения cast(<ТИП>) <переменная>
.
Специальное ключевое слово auto
создаёт переменную и выводит её тип из правой
части выражения. В выражении auto var = 7
переменной var будет присвоен тип int
.
Обратите внимание, что тип по-прежнему определяется на этапе компиляции и не может быть изменён, так же как и у переменной с явно указанным типом.
У всех типов есть свойство .init
, которым они инициализируются. Для всех целочисленных типов это 0
, а для типов с плавающей точкой это NaN
(not a number, "не число").
У целочисленных типов и типов с плавающей точкой есть свойство .max
,
показывающее наибольшее значение, которое может быть представлено этим типом. Целочисленные типы также обладают свойством .min
, показывающим, какое наименьшее значение может быть представлено. У типов с плавающей точкой вместо этого есть свойство min_normal
, которое указывает на наименьшее нормальное значение, не равное нулю. У типов с плавающей точкой есть также свойства .nan
(NaN-значение), .infinity
(бесконечное значение), .dig
(количество десятичных знаков, задающих точность), .mant_dig
(число бит мантиссы) и другие.
У каждого типа есть свойство .stringof
, с помощью которого можно получить имя типа в виде строки.
В D индексы обычно имеют алиас тип size_t
, так как он достаточно большой, чтобы представить смещение во всей адресуемой памяти - uint
для 32-битной и
ulong
для 64-битной архитектур.