如何初始化常量成员值的数组成员?

问题描述 投票:0回答:2

我想使用的恒定值来初始化构件阵列。

--Test.h--

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

--Test.cpp--

int Test::ARRAY_SIZE = 20;

但是,它显示了这样的错误。 “数组边界不是前一个整常数‘]’”

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

我想阵列的固定大小。我不希望任何依赖(如恒定值的其他文件)

什么是我们的最佳做法?

c++ arrays class initialization constants
2个回答
1
投票

该错误是正确的。您的阵列结合的是一个变量,而不是一个常数。

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;
© www.soinside.com 2019 - 2024. All rights reserved.