2011-05-31 66 views
6

我遇到一些麻煩了解如何處理構造的模糊性D.曖昧結構構造在d

struct mydta { 
    int a = 2; 
    int b = 3; 

    this(int c) { 
     a = c/2; 
     b = c * 2; 
    } 
    this(float c) { 
     a = cast(int) c/2; 
     b = cast(int) c * 2; 
    } 

    static mydta afvec = mydta(4.3); 
    static mydta aivec = mydta(5); 
} 
  • afvec有數據值2和8
  • aivec有數據值5和3.

這意味着afvec調用this(float c)正如語法所預期的那樣。

但是aivec已完成類似於aivec.a = 5的分配。

我推斷此發現,以下內容在上面是合法的:aivec = mydta(5, 4);分別給出aivec值5和4。

任何想法如何繞過這種隱式初始化,所以我可以訪問我的構造函數:this(int c)

+0

float也可以是5,所以它不知道使用哪個構造函數。嘗試添加一個演員到他們中的一個。 – Kevin 2011-05-31 07:44:27

+0

這不是問題,問題是如果我使用int,它會調用一些隱式初始化,而不是我希望調用的this(int c)'構造函數。 – dcousens 2011-05-31 07:48:24

回答

5

這看起來像一個bug給我。

如果你這樣做:

mydta foo = mydta(5); 
writeln(foo.b); 

你得到10預期。版本2.053的CTFE發生了很多變化,因此可能導致某些內容被破壞。請將它作爲錯誤發佈在D issue tracking system

+0

你的權利,它只發生在靜態變量,並在其他情況下工作。謝謝。 – dcousens 2011-05-31 09:17:28