像这样写代码
struct S
{
this() // compile-time error
{
}
}
给我一条错误消息说
default constructor for structs only allowed with @disable and no body.
为什么??
最佳答案
这是一种比最初预期要棘手得多的情况。
D与C++相比,重要且有用的功能之一是,每个单一类型(包括所有用户类型)都有一些初始的非垃圾值,可以在编译时对其进行评估。它用作T.init
,并具有两个重要的用例:
template isSomething(T) {
enum isSomething = is(typeof({
//T t1; // not good if T is nested struct, or has @disable this()
//T t2 = void; auto x = t2; // not good if T is non-mutable type
T t = T.init; // avoid default construct check
...use t...
}));
}
int i = void
语法,否则始终始终正确初始化变量。不可能有垃圾。 鉴于此,出现了困难的问题。我们应该保证T()和T.init是相同的(就像许多C++程序员所期望的那样)还是允许默认构造轻松地破坏该保证。据我所知,尽管出人意料,但还是做出了第一种方法更安全的决定。
但是,讨论不断涌现,并提出了各种改进建议(例如,允许启用CTFE的默认构造函数)。最近出现了一种such thread。
关于d - 为什么我不能在D中实现结构的默认构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16648273/