6

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

私はこれを推定して、上記で次のことが正当であることを発見しました:それぞれ値 5 と 4aivec = mydta(5, 4);を与えます。aivec

コンストラクターにアクセスできるように、この暗黙的な初期化をバイパスする方法はありますthis(int c)か?

4

1 に答える 1

5

それは私にはバグのように見えます。

これを行う場合:

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

期待通りになります10。バージョン2.053ではCTFEに多くの変更が加えられたため、結果として何かが壊れている可能性があります。D問題追跡システムにバグとして投稿してください。

于 2011-05-31T09:06:38.437 に答える