2

声明构造函数有什么区别

this(...) { ... }

init(...) { ... }

为 D struct?

BitArray我想知道,因为std.bitmanip只使用init().

4

1 回答 1

4

这是因为 D1 没有结构构造函数。std.bitmanip 的 BitArray 是 D1 的 std.bitarray 模块http://www.digitalmars.com/d/1.0/phobos/std_bitarray.html的一个端口,因此它是以 D1 风格编写的,从未真正更新以使用新的语言功能.

对比D1的struct特征表: http ://www.digitalmars.com/d/1.0/struct.html

使用 D2 的 http://dlang.org/struct.html

你会看到相当多的差异——D1 结构本质上是一个 C 结构,带有一点方法的语法糖。由于构造函数是不可能的,因此您使用了 init 方法。(同样,D1 也没有 struct 析构函数,这使得像 RAII 这样的 C++ 风格的惯用语几乎不可行——你必须使用 scope(exit) mystruct.destroy(); 风格的代码。)

所以这只是一个历史事件。构造函数在底层的工作方式与这些 init 方法相同。

于 2013-10-30T15:17:48.907 回答