【问题标题】:Initializing a static const array in c++在 C++ 中初始化一个静态常量数组
【发布时间】:2014-02-25 15:41:04
【问题描述】:

假设我有一个类 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,有没有更有效的方法来做到这一点?

【问题讨论】:

  • C++11 还是 C++03 ?是fn 可以是constexpr 吗?
  • 如果fn必须执行用户交互、网络IO和随机数生成,怎么可能在编译时?
  • cpp中不应该是const int A::_array[] = ...吗?
  • 是的,它是 A::_array[]

标签: c++ constants static-members


【解决方案1】:

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

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

数组的正确定义也是

const int A::_array[] = {

【讨论】:

    猜你喜欢
    • 2011-05-07
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 2011-06-04
    • 2013-07-11
    • 2019-03-25
    相关资源
    最近更新 更多