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