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-битной архитектур.