在c ++中初始化一个静态const数组

时间:2014-02-25 15:41:05

标签: c++ const static-members

假设我有一个包含静态const int数组的类A,如下所示。

class A {
    static const int _array[];
    static int fn( int n );
}

函数fn包含非常繁重的计算。现在我想使用函数fn。

初始化我的静态const数组

我是通过以下方式做到的:

//.cpp file
int A::fn (int n){
    ....
    return ....
}
const A::_array[] = {
    fn(0);
    fn(1);
    fn(2);
    ...
    fn(9);
}

我的问题是数组初始化是否在编译时?如果我在其他类方法中使用_array [i],fn会运行多少次?初始化时只有10次,或者取决于我使用_array的次数?

编辑: 这是c ++ 03,还有更有效的方法吗?

1 个答案:

答案 0 :(得分:1)

阵列在运行时初始化。但它会在控件传递给main之前初始化。它可以在编译时初始化,如果它和函数定义为constexpr但是这样的函数不能进行非常繁重的计算。

该函数将在初始化列表中调用多次。

数组的正确定义是

const int A::_array[] = {