2014-02-25 86 views
0

比方說,我有一個類A,它包含一個像下面這樣的靜態const int數組。在C++中初始化一個靜態const數組

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

函數fn包含非常繁重的計算。現在我想用函數fn初始化我的靜態常量數組。

我這樣做,以下列方式:

//.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有沒有更有效的方法來做到這一點?

+0

C++ 11或C++ 03? 'fn'可以是'constexpr'嗎? – Jarod42

+0

如何在編譯時如果'fn'必須執行用戶交互,網絡IO和隨機數生成? –

+0

不應該是'const int A :: _ array [] = ...'在cpp中嗎? – Axel

回答

1

數組在運行時初始化。但是它會在控制傳遞給main之前被初始化。它可以在編譯時初始化,如果它和函數被定義爲constexpr但是這樣的函數不能有非常繁重的計算。

該函數的調用次數與初始化列表中的調用次數相同。

另外陣列的正確的定義是

const int A::_array[] = {