静态常量整数数组
Posted
技术标签:
【中文标题】静态常量整数数组【英文标题】:Static constant integer arrays 【发布时间】:2014-05-05 18:13:03 【问题描述】:当像这样在我的类中声明一个静态常量数组时
static const int myArray[] = 1, 2, 3, 999;
我收到类似“const int[] 类型的静态数据成员的类内初始化程序需要 constexpr 说明符”之类的错误。当我这样做并将其声明为
static constexpr int myArray[] = 1, 2, 3, 999;
它有效。为什么不能声明静态常量数组?我错过了什么?
【问题讨论】:
可以声明静态常量数组。无法为它们内联指定初始化程序。 【参考方案1】:题中的declaration和definition/initialization好像有点混淆。
在 C++11 之前,静态成员的定义(通常包括初始化)应该在类外完成,整型或枚举类型的静态常量除外。来自Stroustrup's C++ FAQ:
要使用类内初始化语法,常量必须是整数或枚举类型的静态常量,由常量表达式初始化
即使在这种情况下,如果需要定义(例如,获取静态成员的地址时),也应该在类外定义。
C++11 引入了 constexpr
说明符来表示编译时初始化,如果声明为 constexpr
,则允许在类中初始化静态成员(检查参考中的 Constant static members 部分static
)。它还允许in-class 初始化非静态成员,但具有更广泛的含义。
【讨论】:
以上是关于静态常量整数数组的主要内容,如果未能解决你的问题,请参考以下文章