静态常量整型数组

Static constant integer arrays

本文关键字:数组 整型 常量 静态      更新时间:2023-10-16

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

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

我得到一个错误,如"类内初始化const int类型的静态数据成员[]需要constexpr说明符"。当我这样做并声明它为

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

它的工作原理。为什么不能声明静态常量数组?我错过了什么?

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

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

要使用类内初始化语法,常量必须是由常量表达式

初始化的整型或枚举类型的静态const。

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

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