独り言

はてなダイアリーから移籍。独り言。

配列サイズが0って許されるの?

ちょっと前からやらなければならなかったネタ
時間ができたから、.emacsの編集が落ち着いた辺りで試行。
やりたいことは、テンプレート引数の個数で、
クラスメンバの配列の次元を変えたい。
テンプレート引数自体は配列サイズで。
というわけで書いてみた。


template
class variable_dim {
public:
int array[N1][N2];
};

template
class variable_dim {
public:
int array[N1];
};


int main() {
variable_dim<2> inst1;
variable_dim<2, 4> inst2;

inst1.array[0] = 1;
inst1.array[1] = 2;

inst2.array[0][0] = 10;
inst2.array[0][1] = 20;
inst2.array[0][2] = 30;
inst2.array[0][3] = 40;
inst2.array[1][0] = 50;
inst2.array[1][1] = 60;
inst2.array[1][2] = 70;
inst2.array[1][3] = 80;

for (int i=0; i<2; i++) {
cout << "inst1.array[" << i << "] = " << inst1.array[i] << endl;
}
cout << "inst4.array[0] = " << inst4.array[0] << endl;
for (int i=0; i<2; i++) {
for (int j=0; j<4; j++) {
cout << "inst2.array[" << i << "][" << j << "] =" << inst2.array[i][j] << endl;
}
}
return 0;
}



とりあえず動いてくれて満足!
なんだけど、ちょっと困ったことが。
(少なくともg++では、)サイズ0の配列がコンパイルエラーにならない模様。
例えば、第一引数が0だったらエラーにしたかったのだけど、
それができない?
そもそも int array[0]; って宣言で何も言わないとは思わなかった。
どうしよう