Solaris 动态跟踪指南

类型转换

使用不同但兼容的类型构造表达式时,将会执行类型转换以便确定所产生表达式的类型。类型转换的 D 规则与 ANSI-C 中整数的算术转换规则相同。这些规则有时又称为常用算术转换

以下是说明转换规则的简单方法:每个整数类型按 char、short、int、long、long long 顺序排列,相应的无符号类型分配的级别高于其带符号类型,但低于下一个整数类型。使用两个整数操作数(如 x + y)构造表达式,且操作数为不同的整数类型时,具有最高级别的操作数类型将用作结果类型。

如果需要转换,则首先将低级别的操作数提升为高级别的类型。提升不会实际更改操作数的值:它仅根据符号将值扩展为更大的容器。如果提升无符号的操作数,则所产生整数的未用高序位将使用零填充。如果提升带符号操作数,则将通过执行符号扩展填充未用的高序位。如果将带符号类型转换为无符号类型,则将首先对带符号类型进行符号扩展,然后分配由转换确定的新的无符号类型。

也可以将整数和其他类型从一种类型显式地强制转换为另一种类型。在 D 中,可以将指针和整数强制转换为任何整数或指针类型,但不能转换为其他类型。强制转换以及提升字符串和字符数组的规则将在第 6 章中讨论。整数和指针强制转换使用表达式构成,如下所示:

y = (int)x;

其中,目标类型括在括号中,置于源表达式的前面。可以通过执行提升将整数强制转换为高级别的类型。可以通过将整数多余的高顺序位填充零来强制将整数转换为低级别的类型。

因为 D 不允许浮点运算,所以不允许执行浮点操作数转换或强制转换,也没有定义隐式浮点转换的规则。