我一直認爲在C++中聲明數組時,大小必須是一個常量整數值。用非常量變量聲明數組大小
例如:
int MyArray[5]; // correct
或
const int ARRAY_SIZE = 6;
int MyArray[ARRAY_SIZE]; // correct
但
int ArraySize = 5;
int MyArray[ArraySize]; // incorrect
這裏還什麼是The C++ Programming Language, by Bjarne Stroustrup解釋說:
數組的元素個數(數組綁定)必須是常量表達式(§C.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。
有什麼我失蹤了嗎?
這就是爲什麼用編譯器測試東西並不代表任何代碼正確性的原因。 – GManNickG 2010-05-19 06:37:34
重複的 http://stackoverflow.com/questions/737240/c-c-array-size-at-run-time-w-o-dynamic-allocation-is-allowed – nico 2010-05-19 06:40:22