Arrays are a compound type (§ 2.3, p. 50). An array declarator has the form
a is the name being defined and
d is the dimension of the array. The dimension specifies the number of elements and must be greater than zero. The number of elements in an array is part of the array’s type. As a result, the dimension must be known at compile time, which means that the dimension must be a constant expression (§ 2.4.4, p. 65):
unsigned cnt = 42; // not a constant expressionconstexpr unsigned sz = 42; // constant expression // constexpr see § 2.4.4 (p. 66)int arr; // array of ten intsint *parr[sz]; // array of 42 pointers to intstring ...