ホームページ >バックエンド開発 >C++ >C 11 より前と後の両方で、C クラス初期化子で定数配列を初期化するにはどうすればよいですか?

C 11 より前と後の両方で、C クラス初期化子で定数配列を初期化するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-03 00:26:03609ブラウズ

How do I initialize constant arrays in C   class initializers, both before and after C  11?

C のクラス初期化子での定数配列の初期化

C では、配列をクラスの定数メンバーとして宣言する場合、困難な場合があります。 const 修飾子によりクラス コンストラクター内で初期化します。この記事では、C 11 以前と後の両方のコンテキストでこの課題を克服する方法について説明します。

C 11 より前:

C 11 より前、const を初期化する従来の構文を使用して、クラス初期化子の配列を直接使用することはできませんでした。ただし、次の回避策があります。

<code class="cpp">class a {
    const int *b;
    int b_size;
    
    // Constructor
    a(const int *b_array, int b_sz)
        : b(b_array), b_size(b_sz) {}
};

int main() {
    int b_array[] {2, 3};
    a a(b_array, sizeof(b_array) / sizeof(int));
    // Proceed with using class 'a'
}</code>

このアプローチでは、配列を直接メンバーとして宣言する代わりに、対応するサイズのメンバーを持つポインターとして宣言します。次に、コンストラクターを使用してポインターの割り当てと初期化が行われます。

Post-C 11:

C 11 の導入により、クラス初期化子での const 配列の初期化が行われます。より簡単になりました:

<code class="cpp">struct a {
    const int b[2];
    
    // Constructor
    a() : b{2, 3} {}
};</code>

この構文では、クラス メンバー宣言の直後にある中かっこ {} により、コンストラクター内で const 配列を直接初期化できます。

C 11 でのこの変更クラス初期化子で const 配列を初期化するプロセスを簡素化し、そのようなクラスを定義するためのより簡潔で洗練された方法を提供します。

以上がC 11 より前と後の両方で、C クラス初期化子で定数配列を初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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