2014-03-04 24 views
3

我想用下面的全局聲明一個常量值爲const的數組。但它給編譯錯誤說數組大小不是一個常量值。使用const表達式的數組聲明

const int a[] = {1, 2, 3, 4, 5}; 

int arr[a[1]]; 

但是,如果我將相同的行復制到一個函數,它工作正常。

您能否讓我知道差異以及爲什麼當我嘗試聲明全局數組時不工作。

回答

4

如果你的編譯器支持新的說明符的C++ 2011 constexpr標準,然後嘗試

constexpr int a[] = {1, 2, 3, 4, 5}; 

int arr[a[1]]; 

至於編譯代碼時,它被放置在一個函數,那麼這樣的代碼是不是C++標準。它是您正在使用的編譯器的語言擴展。數組的大小應該是編譯時已知的常量表達式。

在C中,您可以使用可變長度數組(VLA)。一些編譯器在C++中包含了C標準的這一特性。

+0

謝謝弗拉德。我讀了一些在C++數組大小必須是常量表達式的地方,而不僅僅是常量數據。所以[1]不是一個常量表達式。但我不明白什麼是const表達式。這是否意味着該表達式給出了const值。如果是這樣的話,根據我的理解,a [1]也應該給出const值。你能告訴我什麼是const表達式嗎? – kadina

+0

@kadina這是一個複合問題。您只需知道在編譯時計算用修飾符constexpr定義的對象,編譯器就可以在數組定義中使用這些值。 –