3
我想用下面的全局聲明一個常量值爲const的數組。但它給編譯錯誤說數組大小不是一個常量值。使用const表達式的數組聲明
const int a[] = {1, 2, 3, 4, 5};
int arr[a[1]];
但是,如果我將相同的行復制到一個函數,它工作正常。
您能否讓我知道差異以及爲什麼當我嘗試聲明全局數組時不工作。
我想用下面的全局聲明一個常量值爲const的數組。但它給編譯錯誤說數組大小不是一個常量值。使用const表達式的數組聲明
const int a[] = {1, 2, 3, 4, 5};
int arr[a[1]];
但是,如果我將相同的行復制到一個函數,它工作正常。
您能否讓我知道差異以及爲什麼當我嘗試聲明全局數組時不工作。
如果你的編譯器支持新的說明符的C++ 2011 constexpr
標準,然後嘗試
constexpr int a[] = {1, 2, 3, 4, 5};
int arr[a[1]];
至於編譯代碼時,它被放置在一個函數,那麼這樣的代碼是不是C++標準。它是您正在使用的編譯器的語言擴展。數組的大小應該是編譯時已知的常量表達式。
在C中,您可以使用可變長度數組(VLA)。一些編譯器在C++中包含了C標準的這一特性。
謝謝弗拉德。我讀了一些在C++數組大小必須是常量表達式的地方,而不僅僅是常量數據。所以[1]不是一個常量表達式。但我不明白什麼是const表達式。這是否意味着該表達式給出了const值。如果是這樣的話,根據我的理解,a [1]也應該給出const值。你能告訴我什麼是const表達式嗎? – kadina
@kadina這是一個複合問題。您只需知道在編譯時計算用修飾符constexpr定義的對象,編譯器就可以在數組定義中使用這些值。 –