2014-09-29 68 views
3

根據我的C++教材,下面的表達式:爲什麼你不能在C++中使用一個數組大小的變量?

cout << "Enter number of students\n"; 
cin >> number; 
int score [number]; 

是一個非法表達。 我無法使用數組大小​​的變量。

爲什麼我不能這樣做? (我沒有尋找替代方案,我沒有得到指針,向量等,但我想了解這種行爲。)

+4

因爲C++不允許它。 – 2014-09-29 03:04:03

+0

從編譯器的POV中查看它。在生成目標文件時,它應該爲你的數組保留多少空間? – 2014-09-29 03:04:18

+0

在C'int分數[數字];'是合法的。可變長度數組。 – chux 2014-09-29 03:05:45

回答

4

可變長度數組在ISO C90/ANSI C89中不支持從其派生C++。儘管在C99中添加了偏離C++的VLA,但在C++中它們可以說是不必要的,它具有STL容器類來提供更靈活的方法來存儲多個對象。

+0

另一方面,關於「它們在C++中可能是不必要的」,因爲我們有一個積極的提議並且幾乎什麼都不是絕對必要的,所以它們在C++中也可以被認爲是有用的*。 – 2014-09-29 03:56:20

+0

@ Cheersandhth.-Alf:關於「有爭議」的事 - 你可以爲此爭論。我不會說「一點都不是絕對必要的」,編程語言中的某些特徵對於使它成爲「圖靈完成」是必要的。有人提議,但ISO委員會似乎沒有人着急。 – Clifford 2014-09-29 09:01:26

0

在C++中,編譯器必須知道要分配給數組的內存量在編譯時。但是,變量的值在運行時間之前是未知的。這就是爲什麼你不能使用變量來表示數組的大小。

如果您需要爲類項目使用數組,我建議使用const來定義您允許的最大大小。稍後,您將學習如何使用其他技術,如指針和STL容器(如std :: vector)。

+1

實際上並沒有回答這個問題。另外,沒有提到載體。 – 2014-09-29 03:07:22

+0

請注意,這是一種仿古風格,自1998年以來,它是首選編寫'std :: vector number;' – 2014-09-29 03:07:25

+1

@NeilKirk從技術上講,你是對的,它不回答這個問題,但它確實提供了一個替代方案OP想要實現 – 2014-09-29 03:08:13

相關問題