ホームページ  >  記事  >  バックエンド開発  >  コンストラクターのメンバー初期化子リストで配列を初期化できますか?

コンストラクターのメンバー初期化子リストで配列を初期化できますか?

DDD
DDDオリジナル
2024-11-18 11:21:02395ブラウズ

Can Arrays Be Initialized in a Constructor's Member Initializer List?

コンストラクターでのメンバー配列の初期化

次の C クラスについて考えてみましょう。

class C {
public:
    C() : arr({1, 2, 3}) {}
    // C() : arr{1, 2, 3} {}
private:
    int arr[3];
};

コードは、コンストラクターのメンバー初期化子リスト内の arr 配列メンバー。ただし、コンパイルは失敗します。

質問:

  1. コンストラクターのメンバー初期化子リストで配列を初期化することは可能ですか?
  2. この状況について C 03 標準ではどのように規定されていますか?
  3. C 11 にはリストがありますか?初期化はこの問題に対処しますか?

答え:

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 サイトの他の関連記事を参照してください。

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