静态常量整数数组

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】:

题中的declarationdefinition/initialization好像有点混淆。

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

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

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

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

【讨论】:

以上是关于静态常量整数数组的主要内容,如果未能解决你的问题,请参考以下文章

为啥不允许“内联”静态常量,除了整数?

“只能在类中初始化静态常量整数变量”

静态常量(非整数)成员初始化语法背后的基本原理?

DELPHI 中如何定义这个静态二维数组常量

C# 与 C++ 静态数组中静态常量列表初始化的效率

Visual Studio 2013 CTP 是不是支持非整数类型的类内静态常量初始化程序?