ホームページ >バックエンド開発 >C++ >C のコンパイル時に静的配列をプログラムで初期化できますか?

C のコンパイル時に静的配列をプログラムで初期化できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-17 08:02:03380ブラウズ

 Can Static Arrays Be Programmatically Initialized at Compile Time in C  ?

コンパイル時にプログラムで静的配列を作成する

C では、静的配列をコンパイル時に初期化して特定の値を保持できます。次の例を考えてみましょう。

const std::size_t size = 5;    
unsigned int list[size] = { 1, 2, 3, 4, 5 };

質問 1: プログラムによる値の割り当て

コンパイル時にメタプログラミング手法を使用して、これらの値をプログラム的に割り当てることは可能ですか?時間?

答え:

C 0x 機能を使用すると、テンプレートのローカル配列またはメンバー配列を作成し、可変長テンプレート引数リストから初期化することができます。ただし、これはテンプレートのインスタンス化の最大深さによって制限されており、大規模な配列では現実的ではない可能性があります。

質問 2: 選択的な割り当て

特定の配列要素には同じ値でも他の値は異なる場合、コンパイル時にプログラムで選択的な代入を実行できますか時間?

答え:

テンプレート メタ関数を使用すると、値の配列を作成し、それを使用して静的配列を部分的に初期化できます。次の例では、インデックスに基づいて値を選択的に割り当てます。

template<size_t index> struct MetaFunc { 
    enum { value = index + 1 }; 
};

void test() {
    const std::size_t size = 7;
    typedef generate_array<size, MetaFunc>::result A;

    for (std::size_t i=0; i<size; ++i) { 
        if (i <= 1 || i >= 4) {
            A::data[i] = 0;
        }
    }
}

テンプレート メタ関数を活用することで、コンパイル時の評価を確実にしながら、プログラム的な方法で選択的な割り当てを実現できます。

以上がC のコンパイル時に静的配列をプログラムで初期化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。