D中的模糊结构构造函数

时间:2011-05-31 07:42:43

标签: constructor struct initialization d ambiguity

我在理解如何处理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)

1 个答案:

答案 0 :(得分:5)

对我来说这看起来像个错误。

如果你这样做:

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

按预期得到10。对于版本2.053,CTFE有很多变化,因此可能会因某些原因而被破坏。请将其作为错误发布在D issue tracking system