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

我对此进行推断,发现上述内容是合法的:分别aivec = mydta(5, 4);给出aivec值 5 和 4。

任何想法如何绕过这个隐式初始化,以便我可以访问我的构造函数: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 回答