Types D自动类型错误(64位问题?)
一点背景:我在MacOSXLion上(显然是64位),我是一名长期的Java开发人员,对学习D感兴趣 我拿起了一份D编程语言的副本,我对一些事情感到困惑。首先,如果我尝试以下方法(直接从书中): 我得到以下错误: 错误:无法将ulong类型的表达式(i+1LU)隐式转换为int 通过将Types D自动类型错误(64位问题?),types,casting,d,type-inference,Types,Casting,D,Type Inference,一点背景:我在MacOSXLion上(显然是64位),我是一名长期的Java开发人员,对学习D感兴趣 我拿起了一份D编程语言的副本,我对一些事情感到困惑。首先,如果我尝试以下方法(直接从书中): 我得到以下错误: 错误:无法将ulong类型的表达式(i+1LU)隐式转换为int 通过将i更改为int i可以解决此问题 我认为这是因为64位平台上数字的自动类型是ulong,因此类型推断实际上不起作用 现在我有以下问题: bool binarySearch(T)(T[] input, T value
i
更改为int i
可以解决此问题
我认为这是因为64位平台上数字的自动类型是ulong
,因此类型推断实际上不起作用
现在我有以下问题:
bool binarySearch(T)(T[] input, T value) {
// ...
int i = input.length / 2;
// ...
}
返回以下编译错误:
错误:无法将ulong类型的表达式(input.length/2LU)隐式转换为int
铸造修复这一点,但我宁愿不。我还遇到了其他愚蠢的错误,这些错误与从计算中获取long
值有关,然后无法将它们用于索引到数组中。D的64位支持还没有达到标准吗?学习D时,我能做些什么来避免将来的麻烦?在任何地方都必须显式地使用类型转换和类型,这似乎与最初吸引我使用该语言的原因相反
我认为这是因为64位平台上数字的自动类型是ulong,因此类型推断实际上不起作用
对。如果这是TDPL中的错误,您可能应该提交勘误表。foreach
语句的索引变量通常总是size\u t
类型
错误:无法将ulong类型的表达式(input.length/2LU)隐式转换为int
将代码更改为:
size_t i = input.length / 2;
或者更好,所以你不必考虑这个:
auto i = input.length / 2;
事实上,您看到的是,完整的64位阵列支持size\u t
解析为本机整数类型,用于数组索引和数组长度。
对某人
int[] months = new int[12];
foreach (int i, ref month; months) {
month = i + 1;
}
注意:这只是“愚蠢的”,因为您没有使用C语言,而在Java中,与体系结构无关的代码实际上并不存在。因此,在Java中必须使用32位整数或64位整数来索引数组,而在C(和D)中,在索引数组时应该使用size\t
。这使您的代码更加正确(并且与平台无关),当然,D会为您处理这种类型。(在C和D中,size\u t
几乎总是自动别名为无符号32位整数或无符号64位,这就是为什么您看到的是其中一个名称而不是size\u t
)
int[] months = new int[12];
foreach (int i, ref month; months) {
month = i + 1;
}