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 | >= 64 位 (一般为 64 位, 但是在 Intel x86 32-bit 平台上时为 80 位) |
前缀 u 代表 无符号 类型. char 类型会转换为
UTF-8 码元, wchar 类型用于 UTF-16 字符串,而 dchar 用于 UTF-32 字符串.
不同类型的变量之间只有在不会丢失精度时才会发生隐式转换。但是编译器允许浮点类型之间发生隐式转换(例如从 double 到 float 的隐式转换)。
可以使用 cast(类型)变量 表达式来强制转换变量的类型。强制转换需要小心使用,因为它可能会打破类型系统。
可以使用特殊关键字 auto 来创建一个变量,变量的类型会被推断为右侧的初始化表达式的类型。例如,auto myVar = 7中,myVar 的类型会被推断为 int。请注意,使用 auto 声明变量显式写出变量类型进行声明是一样的,变量的类型在编译时被确定的,而不能够被更改。
所有的数据类型都具有表示该类型初始值的 .init 属性,所有整数类型的 .init 属性的值都为 0,而浮点数为 nan (not a number 非数字).
整数以及浮点数类型具有表示该类型最大值的 .max 属性。
整数类型也具有表示该类型最小值的 .min 属性,而浮点数类型都具有被定义为该类型非0的最小可表示的常规值的 .min_normal 属性。
浮点数类型还具有属性 .nan (NaN 值),.infinity
(无穷大值),.dig(小数精度位数),.mant_dig
(尾数的位数) 以及其他属性。
每个类型也都具有一个用来表示类型名称的字符串属性 .stringof。
在 D 中,索引的类型通常为别名类型 size_t,因为这个类型足够大,可以用来表示所有可寻址内存的偏移量 - 在 32 位架构中它为 uint,在 64 为架构中它为 ulong。
assert 是在调试模式下验证条件,并在失败时抛出 AssertionError 错误终止程序的表达式。
assert(0) 用来标记不可达的代码。