在我的类中声明静态常量数组时
static const int myArray[] = {1, 2, 3, 999};
我收到类似&#34的错误;类型为const int []的静态数据成员的类内初始化程序需要constexpr说明符"。当我这样做并将其声明为
时static constexpr int myArray[] = {1, 2, 3, 999};
它有效。为什么不能声明静态常量数组?我错过了什么?
答案 0 :(得分:2)
在问题中似乎有一些关于声明和定义 / 初始化的混淆。
在C ++ 11之前,静态成员的定义(通常包括初始化)应该在类外进行,但是整数或枚举类型的静态常量除外。来自Stroustrup's C++ FAQ:
使用类内初始化语法,常量必须是由常量表达式初始化的整数或枚举类型的静态const
即使在这种情况下,如果需要定义(例如,在获取静态成员的地址时),也应该在类外定义。
C ++ 11引入了constexpr
说明符来表示编译时初始化,并允许在声明constexpr
时在类中初始化静态成员(检查常量静态成员 static
)参考文献中的部分。它还允许in-class初始化非静态成员,但具有更广泛的含义。