array of floats
likeを定義すると、次のようになるのはなぜですか。
const int i[] = { 1, 2, 3, 4 };
float f[i[3]]; // Illegal
関数の外側 (つまり、グローバル) でこれを行うことは違法です。一方、次のような関数( main() を含む)内で同じことを行う場合:
void f() {
const int i[] = { 1, 2, 3, 4 };
float f[i[3]];
cout << sizeof(f);
}
main()
{
f();
}
その後、すべてが正常に機能し、サイズが 16 として正常に出力されます。この違いはなぜですか?格納場所が static (当初) から stack に変更されたためですか?
(PS: C++ では、コンパイル時に値がわからない変数を使用して配列を定義できないことはわかっていますが、それでも関数内でどのように機能しますか?)