静态常量整数数组

时间:2014-05-05 18:13:03

标签: c++ arrays

在我的类中声明静态常量数组时

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

我收到类似&#34的错误;类型为const int []的静态数据成员的类内初始化程序需要constexpr说明符"。当我这样做并将其声明为

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

它有效。为什么不能声明静态常量数组?我错过了什么?

1 个答案:

答案 0 :(得分:2)

在问题中似乎有一些关于声明定义 / 初始化的混淆。

在C ++ 11之前,静态成员的定义(通常包括初始化)应该在类外进行,但是整数或枚举类型的静态常量除外。来自Stroustrup's C++ FAQ

  

使用类内初始化语法,常量必须是由常量表达式初始化的整数或枚举类型的静态const

即使在这种情况下,如果需要定义(例如,在获取静态成员的地址时),也应该在类外定义。

C ++ 11引入了constexpr说明符来表示编译时初始化,并允许在声明constexpr时在类中初始化静态成员(检查常量静态成员 static)参考文献中的部分。它还允许in-class初始化非静态成员,但具有更广泛的含义。