錯誤而聲明一個函數內部靜態數組與功能參數靜態數組定義誤差C++
int fun(int x)
{
int a[x]; //No Error
static int b[x]; //Error "storage size of x is not constant
int *f = new int[x+1]; //NO ERROR--NEW OPERATOR USED TO DEFINE THE ARRAY
}
什麼應在第二線被改變序聲明數組「b」的沒有任何錯誤。
您如何看待編譯器的建議?在這種情況下,你應該使用'std :: vector <>' – quantdev
這裏的根本問題是'const int b [x]'在編譯時分配內存*所以'x'不能是一個變量(它的值在編譯時不知道),而'int * f = new int [x + 1]'在*運行時分配內存*(因爲'new'),所以'x'可以是一個變量。正如@quantdev所說,使用不同的類型,或者使用動態內存分配,例如'int * b = new int [x];'。 – lurker
它也沒用,如果它工作。你會在運行時創建一個const數組,並且無法用有用的數據初始化它。 – Unimportant