コンストラクターでのメンバー配列の初期化
次の C クラスについて考えてみましょう。
class C { public: C() : arr({1, 2, 3}) {} // C() : arr{1, 2, 3} {} private: int arr[3]; };
コードは、コンストラクターのメンバー初期化子リスト内の arr 配列メンバー。ただし、コンパイルは失敗します。
質問:
答え:
1.コンストラクターでの配列の初期化
はい、コンストラクターのメンバー初期化子リストで配列を初期化できます。ただし、次のような中間構造が必要です:
struct A { int foo[3]; A(int a, int b, int c) : foo{a, b, c} {} }; class C { public: C() : foo(A(1, 2, 3)) {} private: A foo; };
2. C 03 標準
C 03 標準は、メンバー初期化子リスト内の配列の初期化に明示的に対処していません。ただし、直接初期化の一般規則では、中括弧を使用して配列を初期化することは禁止されています。
3. C 11 リストの初期化
C 11 では、中かっこを使用して配列を直接初期化できるリストの初期化が導入されました。
class C { public: C() : arr{1, 2, 3} {} private: int arr[3]; };
この場合、配列名の直後に中かっこを使用する構文です。は有効であり、コンストラクターのメンバー初期化子リスト内の配列を初期化します。
以上がコンストラクターのメンバー初期化子リストで配列を初期化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。