C++:如何使用静态常量变量指定数组长度?

C++: How to specify array length with a static constant variable?

我想使用class的常量静态变量声明数组成员变量的长度。如果我这样做:

// A.h
#include <array>
using namespace std;
class A {
      array<int,LENGTH> internalArray;
public:
      const static int LENGTH;
};

// A.cpp
#include "A.h"
constexpr int A::LENGTH{10};

A.h 中存在错误:声明 internalArray 时,“'LENGTH' 未在此范围内声明 ”。

我觉得很奇怪,因为 class 成员变量(即 LENGTH)怎么会超出 class 的范围?我发现的唯一解决方法是将初始化从 A.cpp 移动到 A.h:

// A.h
#include <array>
using namespace std;
constexpr int LENGTH{10};
class A {
      array<int,LENGTH> internalArray;
public:
      const static int LENGTH;
};

但据我了解,首先这是两个不同的变量:全局命名空间范围 LENGTH 和 class 范围 LENGTH。此外,在 .h 中声明一个变量(在 class A 之外)将在包含 header 的每个翻译单元中创建一个独立的 LENGTH object。

有没有办法用静态 class-scoped 变量指定数组的长度?

试试这个:

#include <array>

class A {
 public:
  static const size_t LENGTH = 12;
 private:
  std::array<int,LENGTH> internalArray;
};

int main(){
  A a;
}

您可以在您的 class header 中声明 LENGTH 的值,无需将其作为单独的全局变量或使其存在于 cpp 文件中。

使用 size_t 类型,因为这是 std::array 模板所期望的类型。

如果 public/private 安排对您不利,请知道您可以在 class header.

中包含多个 public/private 指标