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 指标
我想使用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 指标