4

我已经开始学习 D,但我在使用Andrei Alexandrescu的The D Programming Language一书中提供的示例时遇到了一些麻烦。由于 int 和 ulong 类型之间的转换,一些示例无法编译,我将在下面概述其中之一。

我怀疑问题是因为我使用的是 64 位版本的编译器(Digital Mars 2.064.2 for 64-bit Ununtu),并且书中的示例是使用 32 位编译器测试的。

以下代码:

#!/usr/bin/rdmd
import std.stdio;
void main(){
    int[] arr = new int[10];
    foreach(i, ref a; arr)
        a = i+1;
    writeln(arr);
}

失败并出现以下编译器错误

bcumming@arapiles:chapter1 > ./arrays.d 
./arrays.d(9): Error: cannot implicitly convert expression (i + 1LU) of type ulong to int
Failed: 'dmd' '-v' '-o-' './arrays.d' '-I.'

我可以通过将变量 i 显式声明为 int 类型来解决此问题:

foreach(int i, ref a; arr)
    a = i+1;

确定循环索引的默认类型在 D 中的规则是什么?是因为我使用的是 64 位编译器吗?

4

2 回答 2

6

D 中的所有索引都是类型size_t。这是目标上指针的大小。

于 2013-11-14T15:08:12.330 回答
6

默认循环索引类型与 array.length: 相同size_t。它在 32 位上别名为 uint,在 64 位上别名为 ulong。

于 2013-11-14T15:08:24.347 回答