![](/img/trans.png)
[英]Using static functions of a base class without specifying parameters to avoid ambiguity
[英]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中,由于内联变量被添加到语言中,您至少可以创建定义标题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.