在 c++ 中初始化静态常量数组

Initializing a static const array in c++

本文关键字:常量 数组 静态 初始化 c++      更新时间:2023-10-16

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

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,有没有更有效的方法可以做到这一点?

数组在

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

该函数的调用次数与初始化列表中的调用次数一样多。

数组的正确定义也是

const int A::_array[] = {