2

コンストラクターの宣言の違いは何ですか

this(...) { ... }

init(...) { ... }

Dのstruct

BitArraystd.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 の構造体機能テーブル: http://www.digitalmars.com/d/1.0/struct.html

D2 の http://dlang.org/struct.htmlを使用

かなりの数の違いが見られるでしょう。D1 構造体は、本質的に、メソッド用の構文シュガーが少しある C 構造体でした。コンストラクターは不可能だったので、代わりに init メソッドを使用しました。(同様に、D1 にも構造体デストラクタがなかったため、RAII のような C++ スタイルの慣用句はほとんど機能しませんでした。代わりに、scope(exit) mystruct.destroy(); スタイル コードを使用する必要があります。)

ですから、それは単なる歴史的なものです。コンストラクターは、内部では、これらの init メソッドと同じように機能します。

于 2013-10-30T15:17:48.907 に答える