4

私は 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ビットコンパイラを使用しているからですか?

4

2 に答える 2

6

デフォルトのループ インデックス タイプは array.length: と同じですsize_t。32 ビットでは uint に、64 ビットでは ulong にエイリアスされます。

于 2013-11-14T15:08:24.347 に答える