web-dev-qa-db-ja.com

グローバル配列のサイズを整数定数にする必要があるのはなぜですか?

C++では、あるサイズのグローバル配列を宣言してみました。エラーが発生しました:

バインドされた配列は「]」トークンの前の整数定数ではありません

しかし、main()関数で同じ型の配列を宣言すると、正常に機能します。

ここに異なる動作があるのはなぜですか?

int y=5;
int arr[y];         //When I comment this line it works fine

int main()
{
    int x=5;
    int arr2[x];        // This line doesn't show any error.
}

編集:多くの人がこの質問が Getting error "array bound is not a integer constant before ']' token" の重複であることを示唆しています。しかし、その質問は、なぜ異なる行動があるのか​​には答えません。

8
Syed Maqthyar

C++の型システムは、これらのCのような配列をarr2タイプの例からint[5]。だから、はい、配列の要素の数は型の一部です!

これは、Cのような配列の定義で使用できるものにいくつかの制約を課します。つまりこの数は静的ストレージである必要があり、immutableである必要があり、コンパイル時で使用可能である必要があります。

したがって、コードを次のようなものに変更すると、別の利点があります。適切な方法で配列を初期化します。

int arr2[] = {0, 0, 0, 0, 0};   
0
salchint