配列の結合 =~

ちょっと気になったので、はっきりさせておきたいこと。

import std.stdio;

int main()
{
  Object[] array;
  
  for (int i = 0; i < 10; ++i) {
    if (i % 2) {
      array ~= new Object[2];
    } else {
      array ~= null;
    }
  }
  writef("%s\n", array.length);
   
  return 0;
}

これは「15」。

import std.stdio;

int main()
{
  Object[][] array;
  
  for (int i = 0; i < 10; ++i) {
    if (i % 2) {
      array ~= new Object[2];
    } else {
      array ~= null;
    }
  }
  writef("%s\n", array.length);
   
  return 0;
}

これは「10」。

こういう話、ちょっと考えれば当然のように分かるけど、何気なく使っていて、「あれっ?」と思うと混乱する。