如何避免在类中显式指定静态数组的大小
How to avoid explicitly specifying size for static array in class
我在C++11中有两个A类和B类。类 A 中有一个静态数组,用于类 B 中。 这是一个简化的问题:
// A.h
class A {
public:
static int const a[4];
};
// A.cpp
int const A::a[4] = {1,2,3,4};
// B.h
class B {
public:
void method();
};
// B.cpp
void B::method() {
for(auto const& it:a) {
/* do something */
}
}
它可以工作,但它需要显式定义数组大小。我想在编译时不时更改数组初始值设定项的内容,而无需手动重新定义其大小。
什么是等效但更有效的方法呢?
如果是const
你就做不到。但是,如果constexpr
,您可以:
class A {
public:
static constexpr int a[] = {1, 2, 3, 4};
};
只需将初始值设定项移动到类定义中即可。然后,您可以完全省略数组大小。
正如 @SergeBallesta 所指出的,需要注意的一个警告是,如果您使用数组,则不能跳过定义数组的存储。您的示例显然在循环范围内这样做(它需要指向开头和结尾的指针(。因此,您的 cpp 文件仍然需要const int A::a[];
声明。
在 C++17 中,您至少可以制作定义标头,这要归功于将内联变量添加到语言中。
相关文章:
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 静态数组的自由动态数组
- 如何在C++中删除静态数组?
- 为什么 &a 和 c++ 中的静态数组相同?
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 将在堆栈上声明的元素添加到静态数组
- const_cast静态数组以添加恒常性
- 动态分配的数组和静态数组之间的区别
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 我可以使用 constexpr 函数声明一个静态数组吗?
- 使用 lambda 初始化静态数组
- 为什么从函数返回数组时需要将数组声明为静态数组.(C++)
- 根据模板值确定的静态数组大小
- 如何使用 PHP-CPP 在 PHP 类中添加静态数组
- 包含不同大小静态数组的类的多个实例
- 从我的对象返回静态数组
- 如何避免在类中显式指定静态数组的大小
- 编译类型的时静态数组
- 来自函数参数的 C++ 静态数组声明