我在理解如何处理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 :(得分:5)
对我来说这看起来像个错误。
如果你这样做:
mydta foo = mydta(5);
writeln(foo.b);
按预期得到10
。对于版本2.053,CTFE有很多变化,因此可能会因某些原因而被破坏。请将其作为错误发布在D issue tracking system。