Я всегда думал, что при объявлении массива в С++ размер должен быть постоянным целочисленным значением.
Например:
int MyArray[5]; // correct
или
const int ARRAY_SIZE = 6;
int MyArray[ARRAY_SIZE]; // correct
но
int ArraySize = 5;
int MyArray[ArraySize]; // incorrect
Вот что объясняется в Язык программирования С++, Bjarne Stroustrup:
Число элементов массива, связанного с массивом, должно быть постоянным выражением (§С .5). Если вам нужны переменные границы, используйте вектор (§3.7.1, §16.3). Например:
void f(int i) {
int v1[i]; // error : array size not a constant expression
vector<int> v2(i); // ok
}
Но, к моему большому удивлению, приведенный выше код отлично компилируется в моей системе!
Вот что я пытался скомпилировать:
void f(int i) {
int v2[i];
}
int main()
{
int i = 3;
int v1[i];
f(5);
}
У меня нет ошибки! Я использую GCC v4.4.0.
Есть ли что-то, что мне не хватает?