2013-11-14 51 views
4

我已經開始學習D了,並且在Andrei Alexandrescu編寫的D編程語言提供的示例中遇到了一些問題。少數例子因int和ulong類型之間的轉換而無法編譯,其中一個我在下面概述。D中循環索引變量的默認類型是什麼?

我懷疑問題是由於我正在使用64位版本的編譯器(Digital Mars 2.064.2用於64位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); 
} 

失敗,出現以下編譯器錯誤

[email protected]: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位編譯器嗎?

回答

5

默認循環索引類型與array.length相同:size_t。在32位上是uint,在64位上是ulong。

5

D中的所有索引都是size_t類型。這是目標上指針的大小。

相關問題