繁体   English   中英

如何避免在类中显式指定静态数组的大小

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM