class Foo {};
int main()
{
Foo *foo[500] = { NULL};
}
OS/コンパイラに関係なく、配列全体が に設定されるのは標準NULL
ですか?
はい、C++ 標準によって有効で保証されています。
参照:
C++03 Standard 8.5.1 Aggregates
Para 7:
リスト内のイニシャライザが集約内のメンバよりも少ない場合、明示的に初期化されていない各メンバは値で初期化されます(8.5)。[例:
struct S { int a; char* b; int c; }; S ss = { 1, "asdf" };
、、およびフォームの式の値、つまり で初期化
ss.a
します。]1
ss.b
"asdf"
ss.c
int()
0
値の初期化は以下で定義されます。
C++03 8.5 初期化子
パラ 5:
T 型のオブジェクトを値で初期化
するとは、次のことを意味します。 — T がユーザー宣言コンストラクタ (12.1) を持つクラス型 (第 9 節) である場合、T のデフォルト コンストラクタが呼び出されます (T の場合、初期化の形式は正しくありません)。アクセス可能なデフォルト コンストラクタはありません);
— T が、ユーザーが宣言したコンストラクターを持たない非共用体クラス型である場合、T のすべての非静的データ メンバーと基底クラス コンポーネントは値で初期化されます。
— T が配列型の場合、各要素は値で初期化されます。
— それ以外の場合、オブジェクトはゼロで初期化されます
{NULL}
500 秒が表示されると予想される単一の構造を意味する場合NULL
、はい、それは有効です。
(個人的に{NULL,}
は、もっと暗黙の値があることを明確にするために、そのようなリストをコンマで終わらせることを習慣にしていますが、それは単なるスタイルの問題です。)
NULL に設定する必要はありません。そうしないと、配列にガベージ値が含まれます。
初期化された「Plain old C」の構造体と集合体は、完全に初期化されます。これは C に由来します。初期化子を持たないメンバーはゼロに初期化されます。(型のゼロが意味するものは何でも: null ポインター、または 0.0 浮動小数点値)。
C++ では、メンバーはコンストラクターを持つクラス型にすることができます。初期化子を持たないそのようなメンバーは、デフォルトのコンストラクターによって初期化されます。