C++ 標準は次のように述べています (8.5/5):
タイプのオブジェクトをデフォルトで初期化するとは、次のことを
T意味します。
が
T非 POD クラス型 (節 9) の場合、 のデフォルト コンストラクターTが呼び出されます (Tアクセス可能なデフォルト コンストラクターがない場合、初期化の形式は正しくありません)。
Tが配列型の場合、各要素はデフォルトで初期化されます。それ以外の場合、オブジェクトはゼロで初期化されます。
このコードで
struct Int { int i; };
int main()
{
Int a;
}
オブジェクトaはデフォルトで初期化されていますが、a.i必ずしも 0 に等しいとは限りません。IntPOD は配列ではなく、標準と矛盾しませんか?
編集classからに 変更されstruct、IntPOD になりました。