7

配列メンバーを持つ構造体があり、構造体のコンストラクターで配列の既定のコンストラクターを明示的に呼び出した場合、要素は既定で構築されますか? (整数配列の場合、これはゼロで初期化されることを意味します)。

struct S
{
    S() : array() {}

    int array[SIZE];
};

...

S s;
// is s.array zero-initialized?

gcc を使用した簡単なテストでは、これが事実であることが示唆されていますが、この動作に依存できることを確認したかったのです。

(構造コンストラクターで配列を明示的にデフォルト構築しない場合、配列要素はランダムな値を持つことに気付きました。)

4

1 に答える 1

12

はい(私の強調表示):

(C++03 8.5)

タイプ T のオブジェクトを値で初期化するとは、次のことを意味します。

  • T がユーザー宣言コンストラクター (12.1) を持つクラス型 (第 9 節) である場合、T のデフォルト コンストラクターが呼び出されます (T にアクセス可能なデフォルト コンストラクターがない場合、初期化の形式は正しくありません)。

  • T がユーザー宣言のコンストラクターを持たない非共用体クラス型の場合、T のすべての非静的 > データ メンバーおよび基底クラス コンポーネントは値で初期化されます。

  • T が配列型の場合、各要素は値で初期化されます。

  • それ以外の場合、オブジェクトはゼロで初期化されます

...

初期化子が括弧の空のセット、つまり () であるオブジェクトは、値で初期化されます。

于 2011-06-27T21:43:03.530 に答える