2

C++ 関数で 'static' 修飾子で宣言された変数は 1 回だけ初期化されることを知っています。私がやりたいことは、動的に割り当てられた静的な配列を適切な内容で初期化することです。ここに私のコードフラグメントがあります:

inline char* getNextPass()
{
    static int chars_num = chars_data.charset_len, pass_len = chars_data.pass_len ;
    static int *cur_pos = new int[pass_len] ;  // this is static variable in function, what means it's initialized only once

    ...
    for(int aa = 0; aa < pass_len; aa++)  // this is executed every time the function is called. How can I make this code execute only once ?
    cur_pos[aa] = 0 ;
    ...
}

もちろん、次のようなことができることは知っています。

...
flag = true ;
...
inline char* getNextPass()
{
    ...
    if(flag)
    for(int aa = 0; aa < pass_len; aa++)
    cur_pos[aa] = 0 ;
    flag = false ;
    ...
}

しかし、それはおそらく最適なコーディング方法ではなく、何らかの形でより効果的に行うことができます. より最適化された実装を行うために、何らかの方法で「静的」修飾子を使用できますか?

4

4 に答える 4

0

AllocAndInit という静的関数を作成し、次のように呼び出します (関数の内部で割り当て、割り当てた配列を初期化します)。

static int *cur_pos = AllocAndInit(pass_len);

AllocAndInit メソッドは次のようになります。

int * AllocAndInit(pass_len)
{
    int * ret = new int[pass_len];
    for (int i = 0 ; i < pass_len; ++i)
    // init here ....

    return ret;
}
于 2013-10-24T19:53:32.953 に答える