c++ - 如何用常量成员值初始化数组成员?

标签 c++ arrays class initialization constants

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

--测试.h--

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

--测试.cpp--

int Test::ARRAY_SIZE = 20;

但是,它显示这样的错误。 'array bound is not an integer constant before ‘]''

所以,我想知道是否有解决方案。

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

这方面的最佳做法是什么?

最佳答案

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

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;

关于c++ - 如何用常量成员值初始化数组成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54586852/

相关文章:

c++ - 关于二维数组

mysql - sql group by 不显示所有结果

php - 数据库数组到预期的 javascript 格式

arrays - Bash 数组访问文件 Glob

java - 从外部 Action 监听器访问 Jtextfield

Java Thread 和 class.loader/class.forname 有助于理解

c++ - Möller-Trumbore Ray-Tri 交集算法

c++ - 访问不活动的 union 成员和未定义的行为?

c++ - 如何加速 R 代码在特定方向上移动矩阵元素 - Rccp?

javascript - 使用jquery根据span标签中的文本写入ID