このアイデアはどこから得たのですか?
最近、他の多くの人から同じことを聞いたので、それは明らかに比較的一般的な誤解です. おそらく、あなたはこの間違った考えで他の誰かからそれを拾ったか、あるいはその考えは単に「直感的」である.
{}
初期化は、少なくとも C89 までさかのぼって機能します。私は、これまでに異なる方法で動作したこと、またはこれまでに異なる方法で動作したコンパイラを認識していません。
集約型 (配列など) を初期化するときの初期化子リストの場合:
集約内のメンバーよりもリスト内の初期化句が少ない場合、明示的に初期化されていない各メンバーは、空の初期化子リスト (8.5.4) から初期化されます。— 集約 [dcl.init.aggr] 8.5.1p7
C++ の用語では、空の初期化子を使用すると、オブジェクトは値で初期化されます。
タイプ T のオブジェクトを値で初期化するとは、次のことを意味します。
— T がユーザー提供のコンストラクター (12.1) を持つ (おそらく cv 修飾された) クラス型 (第 9 節) である場合、T のデフォルト コンストラクターが呼び出されます (T にアクセス可能なデフォルト コンストラクターがない場合、初期化の形式は正しくありません);
— T が (おそらく cv 修飾された) 非共用体クラス型であり、ユーザー提供のコンストラクターがない場合、オブジェクトはゼロで初期化され、T の暗黙的に宣言された既定のコンストラクターが自明でない場合、そのコンストラクターが呼び出されます。
— T が配列型の場合、各要素は値で初期化されます。
— それ以外の場合、オブジェクトはゼロで初期化されます。
— 初期化子 [dcl.init] 8.5p7