せっかくなのでD言語一口メモ

もはやDを使っててつっかえるところはほとんどないのだが、最近1点だけひっかかったところがあるのでメモっておく。オブジェクトの配列をforeachで初期化するとき、

  Test[5] tests;
  foreach (Test t; tests)
    t = new Test;

としてtests[1]とかを触ると、Access Violationになる。これはForeachTypeListで宣言した変数には、集合体の内容が「コピー」されるため。正解は

  Test[5] tests;
  foreach (inout Test t; tests)
    t = new Test;

です。デフォルトが「参照」でもいいような気がするんだけどなー。なにか意味があるのかしらん。