【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

コンストラクタ名

構造体の実装の移行が完了しました。

ブロックベースの実装のため、メンバ変数の初期化を普通の変数宣言と同じ書式で行えます。初期値代入やコンストラクタとの兼ね合いで、仕様を変更しています。

コンストラクタ・デストラクタの名前

以前はD言語の仕様を取り入れてthis(), ~this()としていましたが、thisポインタと名前が被ってしまうため、それぞれctor(), dtor()と変更しました。名前の重複はthisポインタを特別扱いすることで回避できますが、マングリングは避ける方針のため、特別扱いは取り下げました。

初期化順序

メンバ変数の初期化は以下の順序で行われます。

  1. 変数宣言(struct-declare)での初期値代入
  2. 構造体のメンバ変数定義(var-declare)での初期値代入
  3. コンストラクタでの代入

メンバ変数の初期値(2)が指定されている場合、変数宣言での代入(1)は上書きされます。2はコンストラクタから呼び出されるため、コンストラクタが定義されていない場合は初期化されません。従って変数宣言で代入することを前提とした構造体には、初期値を持たせることはできません。この仕様はコンストラクタがないC言語の構造体を想定しています。