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

最佳答案

在我看来,这似乎是个虫子。

如果您这样做:

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


您得到预期的10。对于2.053版,CTFE进行了很多更改,因此可能会导致某些问题。请将其作为错误发布在D issue tracking system上。

08-17 00:35