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