初始化一个静态const空数组

时间:2010-11-04 06:21:59

标签: c++

是否可以初始化一个静态const空数组,请参见下面的代码,

//CFoo.h
class CFoo
{
 public:
   CFoo();
   ~CFoo();

 public:
    static const int arr[];

};

//CFoo.cpp
const int arr[] = {0,1,2};

CFoo::CFoo(){}
CFoo::~CFoo(){}

编辑:

看起来代码是有效的,对于后续问题,为什么我不能对静态const数组进行sizeof,比如,

sizeof( CFoo::arr );

有什么办法可以缩小CFoo :: arr的尺寸吗?

感谢。

3 个答案:

答案 0 :(得分:5)

是;你需要限定数组的名称:

const int CFoo::arr[] = {0,1,2};

CFoo::arr的类型在定义之前是不完整的,因此您在如何使用它时受到限制。例如,您不能将其用作sizeof的参数。如果您完成声明,则没有问题:

struct CFoo {
    static const int arr[3];
};

但请注意,这具有可维护性问题,因为大小是在两个单独的位置指定的,如果初始化程序值少于声明的数组大小,则可能不会出现错误。

答案 1 :(得分:3)

是。

const int CFoo:arr[] = {0,1,2};

答案 2 :(得分:3)

sizeof在编译时评估,而不是链接时间,所以不 - 你不能在标题中未指定它,而是在定义之前评估它。