2015-06-28 41 views
1

This answer說,C++ 11的新功能,讓我們可以初始化「可變大小的數組」是這樣的:如何初始化C++ 11風格的數組?

auto array = new double[M][N](); 

但是,當我嘗試這樣做,我得到以下錯誤:

array size in new-expression must be constant 

我不忘在.pro文件中添加-std=c++0x。我測試了另一個C++ 11功能,它工作得很好。

他錯了嗎?還是我?

謝謝。

+2

在你引用的答案中,'M'和'N'實際上是常量。答案是關於最後一對parens導致數組被初始化(我不相信在C++ 11中是新的)。 –

+0

你聲明'const auto M,N'? –

+0

閱讀您仔細鏈接的帖子的答案。而且,這在C++ 03和C++ 11之間並沒有改變。 – juanchopanza

回答

2

C++沒有這種不受限制的運行時大小的數組。 C++ 11引入了一個類似於C的VLA的特性,但它明顯更受限制。您不允許在C++中使用VLA的VLA,這意味着C++中任何多維數組的第二,第三和更多維度必須是常量表達式。

顯然,這是您違反的要求。你的N不是一個常量表達式。

在任何情況下,您的問題的標題都會談到初始化,而實際上您遇到的問題根本與初始化無關。您使用的初始化語法 - () - 對於C++ 11來說並不是新功能,它自C++以來就是第一種語言標準。

代碼中唯一的C++ 11功能是auto的上述用法。但它與具體的初始化或數組無關。

+0

我錯誤地錯過了''const''關鍵字,答案開頭的bc。我很抱歉,你是對的。我將使用2D矢量。 – pushandpop