2013-10-18 60 views
0

來自C++文檔http://www.cplusplus.com/doc/tutorial/arrays/
要定義一個這樣的數組,變量b必須是常量。

如何在C++中定義數組

這裏就是我下摹運行++(Ubuntu的/ Linaro的4.6.3-1ubuntu5)4.6.3

int main(){ 

int a = 10; 
int b[a]; 


for(int i = 0; i < 10; i++){ 
    cout << b[i] << endl; 
} 
return 0; 
} 

變量不是恆定的,我沒有錯誤。我可以問什麼版本的g ++會接受這種數組定義?

+0

那麼,在這種情況下,我希望編譯器優化'a',以便事實上用一個常量進行初始化。嘗試用'rand()/ 100000'初始化,看看會發生什麼('#include ') –

+3

@MattPhillips懷疑,優化器在此之後就會出現。 –

+0

@MattPhillips:優化不應該是相關的。語言規則需要一個*常量表達式*,並不僅僅意味着編譯器能夠在編譯時計算出如何評估的內容。 –

回答

4

編譯器正在使用非標準擴展。您的代碼無效,標準C++。可變長度數組不是C++的一個特性。

請注意,大小必須是一個編譯時常量,而不僅僅是一個常量(即const)。

+0

「可變長度數組不是C++的功能」但 – PeterT

+3

@PeterT希望,永遠不會。 –

+0

我的意思是[this](http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3639.html)可以在C++ 14中。我也不是特別喜歡它,但有些人似乎很想要它。更何況所有新的特殊限制,他們只會混淆初學者 – PeterT

0

的延伸對於動態大小的數組你可以在C用std ::矢量++(不完全的陣列,但足夠接近,如果需要原始數組,則可以使用後備存儲)。如果你堅持創建一個動態的數據塊,你可以簡單地使用'new type []'。

int a = 100; 
int[] b = new int[a]; 
+0

感謝您的幫助,但這不是我想要的。 – sflee

1

您不能在C++中創建動態數組,因爲您的編譯器在編譯之前需要知道您的程序有多大。 但是你可以創建一個「新」的數組:

int *b = new int[a];

這將創建一個新的數組預留新的存儲。 你可以用普通的方式訪問這個數組。

for(int i=0; i<a; i++) 
{ 
    b[i]; 
}