私は D の学習を始めましたが、Andrei Alexandrescu によるThe D Programming Languageという本で提供されている例に問題があります。一部の例は、int 型と ulong 型の間のキャストが原因でコンパイルできません。そのうちの 1 つを以下に概説します。
私はコンパイラの 64 ビット バージョン (64 ビット Ununtu 用の Digital Mars 2.064.2) を使用しているため、この問題が発生していると思われます。本の例は 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ビットコンパイラを使用しているからですか?