2014-05-05 61 views
0

當聲明在我的類中的靜態常數陣列那樣靜態恆定整數數組

static const int myArray[] = {1, 2, 3, 999}; 

我得到像「在級初始化器類型const int的的靜態數據成員[]需要constexpr指定符」的錯誤。當我這樣做,並宣佈它爲

static constexpr int myArray[] = {1, 2, 3, 999}; 

它的工作原理。爲什麼不可能聲明靜態常量數組?我錯過了什麼?

+4

可以聲明靜態常量數組。這是不可能爲他們內聯指定一個初始化器。 –

回答

2

似乎有一個關於聲明定義/初始化在這個問題有點混亂。

在C++ 11之前,靜態成員的定義(通常包括初始化)應該在類外進行,除了整型或枚舉類型的靜態常量。從Stroustrup's C++ FAQ

使用在級初始化語法中,常數必須由常量表達式

即使在這種情況下,初始化的積分或枚舉類型的靜態常量,如果需要的定義(例如,在獲取靜態成員的地址時),應該將其定義爲超類。

C++ 11引入了constexpr說明符的信號編譯時間初始化,並允許靜態成員在級被初始化,如果宣佈constexpr(檢查常量靜態成員的static基準部分)。它還允許初始化非靜態成員,但具有更廣泛的含義。