首页 > 解决方案 > 如何用常量成员值初始化数组成员?

问题描述

我想使用一个常量值来初始化成员数组。

--Test.h--

class Test {
public:
  static int ARRAY_SIZE;
...
..
private
  int m_array[ARRAY_SIZE];
}

--Test.cpp--

int Test::ARRAY_SIZE = 20;

但是,它显示这样的错误。'数组边界在']'之前不是整数常量

所以,我想知道有一个解决方案。

我想要固定大小的数组。而且我不想要任何依赖项(例如用于常量值的附加文件)

对此的最佳做法是什么?

标签: c++arraysclassinitializationconstants

解决方案


错误是正确的。您的数组绑定是一个变量,而不是一个常量。

static int ARRAY_SIZE;

上面声明了一个变量。下面声明了一个常量。

static const int ARRAY_SIZE;

对于数组的大小,除了简单地声明之外,还有一个额外的要求const:大小必须用常量表达式初始化,也称为编译时常量(编译器已知的常量值)。如果翻译单元看到 的声明ARRAY_SIZE但没有看到它的值,则它不算作编译时常量。为了解决这个问题,初始化需要在头文件中。结合初始化和声明:

static const int ARRAY_SIZE = 20;

自 C++11 以来,有一种奇特的方式来表达您有一个编译时常量,您可能希望养成在适用时使用它的习惯:

static constexpr int ARRAY_SIZE = 20;

推荐阅读